C 语言中的有符号数和无符号数
首先看一段程序:
View Code
1 #include "stdio.h" 2 3 int main(void) 4 { 5 if ( 1 > 2) 6 { 7 printf("1 > 2 \n"); 8 } 9 10 if (-1 > 2u) 11 { 12 printf("-1 > 2u \n"); 13 } 14 15 if (-1 > 0u) 16 { 17 printf("-1 > 0u \n"); 18 } 19 20 return 0; 21 }
上面为用VC++6.0测试的执行结果。这里面有两条隐含的C语言原则(出处:深入理解计算机系统第二版):
1:C语言中大多数数字都默认为有符号数,包括常量,如3等;
2:当执行一个运算时,如果它的一个运算符是有符号的而另一运算符是无符号的,那么C语言会隐式的将有符号参数强制类型转换为无符号数,并假设这两个数都是非负的,来执行这个运算。
通过上述原则,我们能很容易推导出来上述结果的得出原因。