所以,我有以下内容 -
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位减法?
答案 0 :(得分:3)
您是否可以按照评论中的其他人的要求发布您的代码(由于50+代表要求,抱歉无法发表评论)。由于size_t
为unsigned int
或unsigned 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
这就是你想要的。