〜对整数值有什么作用?这个操作的用法

时间:2014-12-31 16:17:13

标签: c bit-manipulation

我想知道对int值的操作是什么做的。 我编码并打印了〜,指定为3,它给了-4。 请告诉我它的用法。

8 个答案:

答案 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,但基本上如其他答案所述,它会翻转您的示例中的二进制位,从01或{{ 1}}到1

例如,如果您将二进制格式的小数值0表示为

15

如果您要使用1111 的{​​{1}}的按位补码,那么二进制格式会产生

15

显然是十进制的~15

答案 4 :(得分:1)

唯一的补充。 〜翻转位。在您的示例中, 00000011 更改为 11111100 ,假设它是一个8位数字。

请参阅下面的C中按位操作图表。

enter image description here

答案 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;

在初学者面试中也很有用......