main() {
unsigned x = 1;
char y = -1;
if (x > y)
printf("x>y");
else
printf("x<=y");
}
Run Code Online (Sandbox Code Playgroud)
我期待x> y.但当我将unsigned int更改为signed int时,我得到了预期的结果.
nin*_*alj 15
如果char相当于signed char:
char被提升为int(整数促销,ISOC99§6.3.1.12)int并unsigned int具有相同的等级,int转换为unsigned int(算术转换,ISOC99§6.3.1.8)如果char相当于unsigned char:
char可以晋升为int或unsigned int:
int可以表示所有unsigned char值(通常是因为sizeof(int) > sizeof(char)),char则转换为int.sizeof(char)==sizeof(int)),char转换为unsigned.int或unsigned int,另一种是unsigned int.第一个操作数转换为unsigned int.整数提升:int转换为intif 的较低级别的表达式,否则int可以保存原始类型的所有值unsigned int.
算术转换:尝试转换为更大的类型.当有符号和无符号之间存在冲突时,如果较大(包括两种类型具有相同等级的情况)类型是无符号的,则使用无符号.否则,只有在可以表示两种类型的所有值的情况下才使用signed.
转换为整数类型(ISOC99§6.3.1.3):
将超出范围的值转换为无符号整数类型是通过环绕(模运算)完成的.
将超出范围的值转换为有符号整数类型是实现定义的,并且可以引发信号(例如SIGFPE).