这是我的问题代码:
#include "stdio.h" int main() { char a = -1; unsigned char b = 255; unsigned char c = 0; if((~a) == c) printf("OK 1"); else printf("bad 1"); printf("n"); if((~b) == c) printf("OK 2"); else printf("bad 2"); printf("n"); }
我希望这打印:
OK 1 OK 2
但是,我得到OK 1和坏2!
如果unsigned char b
是255(11111111),那么~b应该是00000000.为什么它不等于c?
我使用gcc在Linux SUSE上工作。
你被整数促销活动所困扰。 当你这样做时:
~b == c
b
和c
都被提升为int
。 这意味着你真的在做:
~0x000000ff == 0
最终比较:
0xffffff00 == 0
哪个不匹配。 它适用于您的第一种情况,因为您的char
类型已签名,并在促销中获得符号扩展:
~a == c ~(-1) == 0 ~0xffffffff == 0 0 == 0
由于标准整数提升:在表达式~b
,操作数被提升为int
,可能类似于0x000000FF
; 结果是整数0xFFFFFF00
。
您必须将结果转换回unsigned char
:
if ((unsigned char)(~b) == c) /* ... */
以上就是c/c++开发分享无符号字符c = 255是“11111111”还是不是?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560806.html