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++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/545804.html