比特计算NOT

时间:2016-07-12 12:44:52

标签: c

如何手动计算~a?我经常看到这些类型的问题。

#include <stdio.h>
int main()
{
    unsigned int a = 10;
    a = ~a;
    printf("%d\n", a);
}

4 个答案:

答案 0 :(得分:2)

  

~运算符的结果是其(提升的)操作数的按位补码   C11dr§6.5.3.3

unsigned一起使用时,只需~使用exclusive {或UINT_MAX来模仿(unsigned) -1,其类型和值与unsigned int a = 10; // a = ~a; a ^= -1; 相同。 @EOF

renv global

答案 1 :(得分:1)

你可以用一个1的位掩码对它进行异或。

unsigned int a = 10, mask = 0xFFFFFFFF;
a = a ^ mask;

当然假设int是32位。这就是为什么使用~更有意义。

答案 2 :(得分:0)

只需将数字转换为二进制形式,然后更改&#39; 1&#39; by&#39; 0&#39;和&#39; 0&#39;由&#39; 1&#39;。

那是:

10 (decimal)

转换为二进制(int中通常为32位)给出了:

0000 0000 0000 0000 0000 0000 0000 1010

然后应用~运算符:

1111 1111 1111 1111 1111 1111 1111 0101

现在您有一个可以解释为无符号32位数的数字,或者有一个数字。正如您在%d中使用printfa int1111 1111 1111 1111 1111 1111 1111 0101 ^ | Its most significant bit is 1, so first we change 0 and 1 0000 0000 0000 0000 0000 0000 0000 1010 ,请签名。

要从带符号(2 - 补码)数字中找出十进制值,请执行以下操作:

  • 如果最高位(最左边)为0,那么只需将二进制数转换回十进制数。

  • 如果最重要的位是1(我们这里的情况),那么改变&#39; 1&#39; by&#39; 0&#39;和&#39; 0&#39;通过&#39; 1&#39;,添加&#39; 1&#39;并转换为十进制,在结果前加一个减号。

所以它是:

0000 0000 0000 0000 0000 0000 0000 1010
                                      1
---------------------------------------
0000 0000 0000 0000 0000 0000 0000 1011

然后,我们加1

curl -XDELETE 'http://localhost:9200/*' 

取这个数字并转换回十进制,在结果前加一个减号。转换后的值为11.减号为-11

答案 3 :(得分:-1)

此函数显示int的二进制表示并交换0和1:

mmSocket = (BluetoothSocket) mmDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class}).invoke(mmDevice, Integer.valueOf(1));

来源:https://en.wikipedia.org/wiki/Bitwise_operations_in_C#Right_shift_.3E.3E