C 为什么输出为负数(使用按位not)

C 为什么输出为负数(使用按位not),c,bit-manipulation,bitwise-operators,C,Bit Manipulation,Bitwise Operators,输出为-11 10=1010 ~10=0101 为什么输出为负?~1010的结果不是0101,而是1111111111110101。值的所有32位都被反转,而不仅仅是最高设定位的位 由于在结果中设置了第32位,它是负数。~1010的结果不是0101,而是1111111111111 0101。值的所有32位都被反转,而不仅仅是最高设定位的位 由于在结果中设置了第32位,因此它是负数。%d表示有符号十进制整数。使用%u打印十进制无符号整数。%d表示有符号十进制整数。使用%u以十进制打印无符号整数。使

输出为
-11

10=1010

~10=0101


为什么输出为负?

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


由于在结果中设置了第32位,它是负数。

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


由于在结果中设置了第32位,因此它是负数。

%d
表示有符号十进制整数。使用
%u
打印十进制无符号整数。

%d
表示有符号十进制整数。使用
%u
以十进制打印无符号整数。

使用%u而不是%d,因为printf根据%d或%u处理变量。u对于

使用%u而不是%d,因为printf根据%d或%u处理变量。u对于

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

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

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

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

使用
printf(“%u\n”,a),然后再试一次。@timrau现在的输出是4294967285Try“%x”,它比十进制更明显。int的大小必须>=16位,char>=8位。CUse
printf中没有4位数据类型(“%u\n”,a),然后再试一次。@timrau现在的输出是4294967285Try“%x”,它比十进制更明显。int的大小必须>=16位,char>=8位。C中没有4位数据类型
a
fffffff5