C 整数值上的~做什么?此操作的用法
我想知道int值上的~运算有什么作用。 我编码并打印了~a,其中a被指定为3,它给出了-4。C 整数值上的~做什么?此操作的用法,c,bit-manipulation,C,Bit Manipulation,我想知道int值上的~运算有什么作用。 我编码并打印了~a,其中a被指定为3,它给出了-4。 请告诉我它的用法。~是按位NOT运算符(补码)。它将位0切换到1和1切换到0。在32位机器上,十进制3为 00000000 00000000 00000000 00000011 (2's complement) 11111111 11111111 11111111 11111100 = -4 按位补码等于值减去1的两个补码(~x=−x− 1)。因此,~3是 00000000 00000000
请告诉我它的用法。
~
是按位NOT运算符(补码)。它将位0
切换到1
和1
切换到0
。在32位机器上,十进制3
为
00000000 00000000 00000000 00000011 (2's complement)
11111111 11111111 11111111 11111100 = -4
按位补码等于值减去1的两个补码(~x=−x− 1
)。因此,~3
是
00000000 00000000 00000000 00000011 (2's complement)
11111111 11111111 11111111 11111100 = -4
将所有位反转,它将
0000101
->11101010
例如一元运算符,生成二进制值的按位NOT或补码
在使用有符号整数的情况下:
a = 3 = 0b00000011
~a = -4 = 0b11111100
它是一元补码运算符,或按位not运算符。它翻转数字中的所有位
在有符号整数的情况下,通常最高位存储符号(2的补码存储),因此正数的补码产生负数,反之亦然(0和最小负值除外)。它是按位补码运算符。可以看到更多信息,但本质上正如其他答案所述,它将二进制位从
0
翻转到1
或1
到0
例如,如果十进制值15
以二进制格式表示为
1111
如果你取15
的位补码,就像~15
一样,它的二进制格式会产生
0000
这显然是十进制的
0
。一个人的补码~翻转位。在您的示例中,00000011被更改为111111 00,假设它是一个8位数字
请参阅以下C中的按位运算图表
~是按位NOT运算符,这将翻转位模式。假设位值为1010,此按位NOT运算符将模式翻转为0101该
~
运算符接受任何整数类型的操作数,并返回反转位值
它不会更改操作数本身的值(例如,与++
和--
相反)
它主要用于位屏蔽
示例#1:
- 计算位#5设置为0且所有其他位设置为1的掩码:
int mask=~(1答案如下:[@user2120978,没错!这怎么可能是第一次有人问这个问题。谢谢,但我在这里没能很快找到。所以我想再发一次。否决我答案的人能告诉我需要编辑什么吗?它是一个运算符,而不是一个操作数。根据建议编辑。示例仅适用于
关于4位无符号整数,它通常不会出现在C中(结构位字段除外)。@pat你完全正确。我只是用它作为一个例子,说明位是如何通过补码变化的。~15==0