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

标签 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++。

最佳答案

cout<< a % b << endl;

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

在这种情况下:

cout<< -7777%10 <<endl;

没有提升,因为两个字面量都是 int 类型,您会看到结果 -7。

关于c++ - 对 int 类型和无符号整数的值应用模运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36115709/

相关文章:

sql-server - SQL将int转换为时间

Java 无符号 - 删除符号位

php - 将 unix 时间戳存储为无符号整数会有什么好处吗?

c++ - 将 SFINAE 条件移到最左侧以便于阅读

c++ - 如何在 C++ 中使用复数?

c++ - CPU_ONLY 构建 : compiling the function Forward() gives error "undefined reference..."

c - 不同 int 类型的运算

c++ - 词法范围的排序行为

java - 为什么Java中一个字符减去另一个字符会返回一个整数

java - 如何在 Java 中以 unsign 格式打印字节