c/c++开发分享为什么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等同于unsigned char

    整数提升:一种较低等级的表达式,如果int可以保存原始类型的所有值,则int转换为int ,否则为unsigned

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

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

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

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

    在单个操作中使用signed和unsigned时,signed通过C的自动类型转换被提升为unsigned。 如果-1的位模式被认为是无符号数,则它是非常高的值。 所以x > y是假的。

      以上就是c/c++开发分享为什么unsigned int 1低于char y -1?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545804.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注