64位无符号减法问题

时间:2016-09-14 19:10:15

标签: c++ 64-bit subtraction

所以,我有以下内容 -

size_t Num2= 2359198081
size_t Num1= 2359197799

size_t Diff= Num2 - Num1;

如果我这样做,

std::cout << "Diff: " << Diff;

我明白了,

Diff: 18446744071938113404

如果我做int64_t而不是size_t然后按预期我得到一个负值,因为Num2和Num1大于2加到32

如果我这样做,

std::cout << "Diff: " << Num2 - Num1 << std::endl;

然后我明白了,

差异:282

这是预期的。

我在这里做错了什么?而我怎么能得到这个正确的64位减法?

2 个答案:

答案 0 :(得分:3)

您是否可以按照评论中的其他人的要求发布您的代码(由于50+代表要求,抱歉无法发表评论)。由于size_tunsigned intunsigned long int,因此减法应为282,除非您使用的机器/编译系统实现短于32位的unsigned int

我试过这个并且它可以正常工作(64位)。由于您的Diff打印出0xFFFFFFFF966A0000,我猜您在size_t上也使用了64位实现。只有在您发布完整代码后才能说更多内容!

答案 1 :(得分:1)

问题是你想说Diff = Num2 - Num1但你不小心说Diff = Num1 - Num2

size_t Num2= 2359198081;
size_t Num1= 2359197799;
size_t Diff = Num1 - Num2;
std::cout << Diff << std::endl;

打印:

  

18446744073709551334

这是你得到的。好吧,你声称自己获得了18446744071938113404,这有点不同,所以我猜你的实际数字是不同的,而你的问题也不准确。

size_t num2 = 2359198081;
size_t num1 = 2359197799;
size_t diff = num2 - num1;
std::cout << diff << std::endl;

打印:

  

282

这就是你想要的。

Demo