64位无符号减法问题

64bit unsigned Subtraction issue

本文关键字:问题 无符号 64位      更新时间:2023-10-16

所以,我有如下-

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;

然后得到

Diff: 282

我在这里做错了什么?相反,我怎么能让它做一个正确的64位减法?

你能按照其他人的要求在评论中发布你的代码吗(抱歉,由于50+ rep的要求,不能评论)。由于size_tunsigned intunsigned long int,因此减法应该得到282,除非您使用的是实现unsigned int短于32位的机器/编译系统。

我试过了,它可以正常工作(64位)。由于Diff在您的情况下打印出0xFFFFFFFF966A0000,我猜您也在size_t上使用64位实现。只有当你发布完整的代码时,才能说得更多!

问题是你想说的是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年

这就是你想要的。

演示