main() {
if ( -1 < (unsigned char) 1 )
printf("less than");
else
printf("NOT less than");
}
打印less than
。因为,(unsigned char) 1
被转换为 (signed char) 1
然后: (signed) -1 < (signed) 1
, 因此输出是less than
.
但是如果我将上面的代码更改为if ( (-1 < (unsigned int) 1 )
那么输出是NOT less than
。
所以很明显,当我将 unsigned char 更改为 unsigned int 时:
- (有符号)-1 转换为无符号整数 [正好相反]
- 因为 -1 存储为 2 对 1 的补码;位模式被评估为 255(可能)
- 因此 255 < 1 将评估为 false,否则将执行。
- 即使你用
int a = -1;
'-1'代替相同的结果
问题:
在有符号和无符号算术期间......如何确定是否将有符号转换为无符号,反之亦然。
为什么 unsigned char 和 char 之间的算术转换不同:显然 unsigned 被转换为有符号和无符号 int 和 int :显然有符号是转换器到无符号
PS:我知道这不依赖于编译器..所以不要说它是。