Nik*_*nka -3 c unsigned modulus unsigned-integer
#include <stdio.h>
main() {
unsigned a = -20;
unsigned b = 10;
printf("%d\n", (a % b));
printf("%d\n", (-20 % 10));
}
Output:
6
0
Run Code Online (Sandbox Code Playgroud)
第二个printf打印预期值0,而第一个printf打印6.为什么这个意外输出带有无符号整数?
unsigned int可以保存0到0之间的值UINT_MAX,没有负值.所以-20转换为-20 + UINT_MAX + 1.
在您的系统上:
(-20 + UINT_MAX + 1) % 10 != -20 % 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |