C++ 64位无符号减法问题
因此,我有以下几点-C++ 64位无符号减法问题,c++,64-bit,subtraction,C++,64 Bit,Subtraction,因此,我有以下几点- size_t Num2= 2359198081 size_t Num1= 2359197799 size_t Diff= Num2 - Num1; 如果我这样做 std::cout << "Diff: " << Diff; 如果我用int64而不是size,那么正如预期的那样,我会得到一个负值,因为Num2和Num1都大于2,所以会上升到32 如果我这样做 std::cout << "Diff: " << Num2 -
size_t Num2= 2359198081
size_t Num1= 2359197799
size_t Diff= Num2 - Num1;
如果我这样做
std::cout << "Diff: " << Diff;
如果我用int64而不是size,那么正如预期的那样,我会得到一个负值,因为Num2和Num1都大于2,所以会上升到32
如果我这样做
std::cout << "Diff: " << Num2 - Num1 << std::endl;
std::cout您能否按照其他人的要求在评论中发布您的代码(抱歉,由于50+代表要求,无法发表评论)。由于size\u t
是unsigned int
或unsigned long int
,减法应产生282,除非您使用的机器/编译系统实现的unsigned int
小于32位
我尝试了这个,它工作正常(64位)。由于您的示例中的Diff
正在打印0xffffff966a0000
,因此我猜您在size\u 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;
印刷品:
282
这就是你想要的
显示真实代码。你所描述的没有意义,所以一定有一些事情你没有提到。提供编译、运行和显示问题的程序。size\t
是无符号类型。如果你期望一个负值,调整你的期望值。并显示真实代码;根据您所展示的,Num2-Num1
生成282。您可能正在计算Num1-Num2吗?阅读以下内容:如何使用无符号
整数获得负值?@ThomasMatthews:OP在该场景中使用int64\t
。下次使用复制/粘贴将代码放入问题。愚蠢的规则。拿你的50块钱,耶!让我们评论一下!谢谢
size_t Num2= 2359198081;
size_t Num1= 2359197799;
size_t Diff = Num1 - Num2;
std::cout << Diff << std::endl;
size_t num2 = 2359198081;
size_t num1 = 2359197799;
size_t diff = num2 - num1;
std::cout << diff << std::endl;