例如下面的代码
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++。
最佳答案
cout<< a % b << endl;
在上面的行中,a
是converted由于通常的算术转换,转换为无符号类型(因为您将 b
声明为 unsigned
)。
当我在我的机器上将 -7777 的二进制表示解释为正值时,它产生 4294959519,这可能解释了你的情况下 9 的结果。
在这种情况下:
cout<< -7777%10 <<endl;
没有提升,因为两个字面量都是 int
类型,您会看到结果 -7。
关于c++ - 对 int 类型和无符号整数的值应用模运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36115709/