为什么unsigned int 1低于char y -1?

main()
{
    unsigned x=1;
    char y=-1;

    if(x>y)
          printf("x>y");
    else
        printf("x<=y");
}

我期望x> y.
但当我将unsigned int更改为signed int时,我得到了预期的结果.

解决方法

如果char等同于signed char:

> char被提升为int(整数促销,ISOC99§6.3.1.1¶2)
>由于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,另一个是unsigned.第一个操作数转换为无符号.

整数促销:
如果int可以保存原始类型的所有值,则int转换为int的低级别类型的表达式,否则为无符号.

算术转换:
尝试转换为更大的类型.当有符号和无符号之间存在冲突时,如果较大(包括两种类型具有相同等级的情况)类型是无符号的,则使用无符号.否则,只有在可以表示两种类型的所有值的情况下才使用signed.

转换为整数类型(ISOC99§6.3.1.3):

将超出范围的值转换为无符号整数类型是通过环绕(模运算)完成的.

将超出范围的值转换为有符号整数类型是实现定义的,并且可以引发信号(例如SIGFPE).

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...