我想知道对int值的操作是什么做的。 我编码并打印了〜,指定为3,它给了-4。 请告诉我它的用法。
答案 0 :(得分:6)
~
是按位NOT运算符(补码)。它将位0
切换为1
,将1
切换为0
。在32位机器上,十进制3
是
00000000 00000000 00000000 00000011 (2's complement)
按位补码等于值的二进制补码减一(~x = −x − 1
)。因此~3
是
11111111 11111111 11111111 11111100 = -4
答案 1 :(得分:3)
生成按位NOT或二进制值补码的一元运算符。
在您使用带符号整数的情况下:
a = 3 = 0b00000011
~a = -4 = 0b11111100
答案 2 :(得分:1)
它是一元补码运算符,或按位运算符。它会翻转一个数字中的所有位。
在有符号整数的情况下,通常最高位存储符号(2的补码存储),因此补充正数会产生负数,反之亦然(0和最小负值除外) )。
答案 3 :(得分:1)
它是按位补码运算符。可以看到更多信息here,但基本上如其他答案所述,它会翻转您的示例中的二进制位,从0
到1
或{{ 1}}到1
。
例如,如果您将二进制格式的小数值0
表示为
15
如果您要使用1111
的{{1}}的按位补码,那么二进制格式会产生
15
显然是十进制的~15
。
答案 4 :(得分:1)
唯一的补充。 〜翻转位。在您的示例中, 00000011 更改为 11111100 ,假设它是一个8位数字。
请参阅下面的C中按位操作图表。
答案 5 :(得分:1)
〜是按位NOT运算符,这会翻转位模式。假设位值为1010,该按位NOT运算符将模式转换为0101
答案 6 :(得分:0)
反转所有位,它变为00010101
- >例如11101010
答案 7 :(得分:0)
~
运算符接受任何整数类型的操作数,并返回反转位值。
它不会更改操作数本身的值(例如,与++
和--
相对)。
它主要用于位掩码。
示例#1:
计算掩码,其中#5位设置为0,所有其他位设置为1:
int mask = ~(1<<5);
给定一个整数变量x
,将所有位设置为1并将第5位保持为当前值:
x |= mask;
示例#2:
计算掩码,其中#5位设置为1,所有其他位设置为0:
int mask = (1<<5);
给定一个整数变量x
,将所有位设置为0并将第5位保持为当前值:
x &= ~mask;
在初学者面试中也很有用......