这是我的问题代码:
#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
但是,我得到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
关于c - unsigned char c = 255是否为 "11111111"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17869967/