如何手动计算~a
?我经常看到这些类型的问题。
#include <stdio.h>
int main()
{
unsigned int a = 10;
a = ~a;
printf("%d\n", a);
}
答案 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
中使用printf
而a
int
是1111 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