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语言会隐式的将有符号参数强制类型转换为无符号数,并假设这两个数都是非负的,来执行这个运算。

通过上述原则,我们能很容易推导出来上述结果的得出原因。

原文地址:https://www.cnblogs.com/chenchenluo/p/2715903.html