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