64位无符号减法,问题
所以,我有以下各项64位无符号减法,问题
size_t Num2= 2359198081
size_t Num1= 2359197799
size_t Diff= Num2 - Num1;
如果我这样做,
std::cout << "Diff: " << Diff;
我得到的,
Diff: 18446744071938113404
,如果我做的size_t的代替的int64_t然后如预期的那样,由于Num2和Num1大于2会增加到32,所以我会得到一个负值。
如果我这样做,
std::cout << "Diff: " << Num2 - Num1 << std::endl;
然后我得到的,
DIFF:282
这是符合市场预期。
我在做什么不正确?而我怎么能得到这个做一个正确的64位减法?
你可以发表你的代码,如其他评论中提出的问题(对不起,不能评论由于50 +代表要求)。由于size_t
为unsigned int
或unsigned long int
,因此除非您使用的计算机/编译系统实现的短于32位的值,否则减法应该为282。
我试过这个,它能正常工作(64位)。由于您的案例中的Diff
正在打印出0xFFFFFFFF966A0000
,我猜你也在size_t
上使用64位实施。只有发布完整的代码,才能说更多!
愚蠢的规则。有你的50. –
耶!让我们评论一下!谢谢 – asterx
的问题是,你的意思是说Diff = Num2 - Num1
但你不小心说Diff = Num1 - Num2
:
size_t Num2= 2359198081;
size_t Num1= 2359197799;
size_t Diff = Num1 - Num2;
std::cout << Diff << std::endl;
打印:
这是你在说什么。那么,你声称你得到18446744071938113404
,这是略有不同,所以我猜你的实际数字是不同的,你的问题是不准确的。
size_t num2 = 2359198081;
size_t num1 = 2359197799;
size_t diff = num2 - num1;
std::cout << diff << std::endl;
打印:
这是你想要的。
显示真实的代码。你所描述的内容没有意义,所以必须有一些你没有提到的事情。提供编译,运行和显示问题的程序。 –
'size_t'是一个无符号类型。如果您希望获得负值,请调整您的期望值。并显示真实的代码;与你所显示的一样,'Num2 - Num1'产生了282.你是在计算'Num1 - Num2'吗?阅读本文:[mcve] –
如何使用'unsigned'整数获得负值? –