这是我的问题代码:

#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
bc都被提升为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/

10-12 12:55
查看更多