对int类型和无符号整数的值应用模运算

时间:2016-03-20 15:30:52

标签: c++ int unsigned-integer

例如下面的代码

int a = -7777;
int b = 10;
cout<< a % b<<endl;
cout<<(a+b)%b<<endl;
cout<< -7777%10 <<endl;

结果是:

-7
-7
-7

但如果我将b的类型更改为unsigned int,则它具有不同的值;

int a = -7777;
unsigned int b = 10;
cout<< a % b<<endl;
cout<<(a+b)%b<<endl;
cout<< -7777%10 <<endl;

结果是

9
9
-7

任何人都可以建议它在这里如何运作吗?这些差异是如何产生的?

顺便说一句:我在Xcode最新版本中使用C ++。

1 个答案:

答案 0 :(得分:5)

  

COUT&LT;&LT; a%b&lt;&lt; ENDL;

由于通常的算术转换,上述行aconverted为无符号类型(因为您将b声明为unsigned)。 当我在我的机器上将-7777的二进制表示形式解释为正值时,它会产生4294959519,这可能解释了你的情况下9的结果。

在这种情况下:

cout<< -7777%10 <<endl;

没有宣传,因为两个文字都是int类型,你看到结果-7。