例如下面的代码
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 ++。
答案 0 :(得分:5)
COUT&LT;&LT; a%b&lt;&lt; ENDL;
由于通常的算术转换,上述行a
为converted为无符号类型(因为您将b
声明为unsigned
)。
当我在我的机器上将-7777的二进制表示形式解释为正值时,它会产生4294959519,这可能解释了你的情况下9的结果。
在这种情况下:
cout<< -7777%10 <<endl;
没有宣传,因为两个文字都是int
类型,你看到结果-7。