【发布时间】:2013-04-13 21:14:54
【问题描述】:
#include <stdio.h>
main() {
unsigned a = -20;
unsigned b = 10;
printf("%d\n", (a % b));
printf("%d\n", (-20 % 10));
}
Output:
6
0
第二个 printf 打印期望值 0,而第一个 printf 打印 6。 为什么这个带有无符号整数的意外输出?
【问题讨论】:
-
因为
1<<32不能被 10 整除?顺便说一句:为什么你对 unsigned int 使用负初始化器? BTW2: printf() 具有用于无符号整数的%u说明符。%d用于有符号整数。
标签: c unsigned modulus unsigned-integer