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位减法?

+2

显示真实的代码。你所描述的内容没有意义,所以必须有一些你没有提到的事情。提供编译,运行和显示问题的程序。 –

+1

'size_t'是一个无符号类型。如果您希望获得负值,请调整您的期望值。并显示真实的代码;与你所显示的一样,'Num2 - Num1'产生了282.你是在计算'Num1 - Num2'吗?阅读本文:[mcve] –

+0

如何使用'unsigned'整数获得负值? –

你可以发表你的代码,如其他评论中提出的问题(对不起,不能评论由于50 +代表要求)。由于size_tunsigned intunsigned long int,因此除非您使用的计算机/编译系统实现的短于32位的值,否则减法应该为282。

我试过这个,它能正常工作(64位)。由于您的案例中的Diff正在打印出0xFFFFFFFF966A0000,我猜你也在size_t上使用64位实施。只有发布完整的代码,才能说更多!

+0

愚蠢的规则。有你的50. –

+0

耶!让我们评论一下!谢谢 – 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; 

打印:

这是你想要的。

Demo