为什么输出为负(使用按位 - 不)

时间:2014-03-07 09:17:39

标签: c bit-manipulation bitwise-operators

void main()
{
        unsigned int a = 10;
        a = ~a;
        printf("%d\n", a);
}

输出为-11

10 = 1010

~10 = 0101

为什么输出是负数?

4 个答案:

答案 0 :(得分:2)

使用%x查看一致的十六进制结果。

#include <stdio.h>
void main()
{
        unsigned int a = 10;
        printf("%x\n", a);

        a = ~a;
        printf("%x\n", a);
        return 0;
}

输出:

a
fffffff5

答案 1 :(得分:1)

~1010的结果不是0101,而是11111111111111111111111111110101。该值的所有32位都被反转,不仅是最高位的最高位。

当结果中设置了第32位时,它是负数。

答案 2 :(得分:1)

%d用于签名十进制整数。使用%u以十进制格式打印无符号整数。

答案 3 :(得分:0)

使用%u代替%d,因为printf会根据%d或%u处理您的变量。你的