从一个简单的例子看:
int a = 10;
a = ~a;
System.out.println(a);
int b = -10;
b = ~b;
System.out.println(b);
out:
-11
9
感觉 x = ~x;的结果是 -x-1
运算过程:
java int 是两个字节的,所以如下表:
第一波~
过程说明 | 二进制 | 结果 |
---|---|---|
10的原码、反码、补码一致 | 0000 0000 0000 0000 0000 0000 0000 1010 | 10 |
~10 按位取反 | 1111 1111 1111 1111 1111 1111 1111 0101 | |
赋值的时候,二进制首位是1, 所以将其当做负数来处理,即 将上一步的二进制当做补码处 理,需要恢复原码,在来一波 按位取反,末尾加一 |
1000 0000 0000 0000 0000 0000 0000 1011 | -11 |
又一波~
过程说明 | 二进制 | 结果 |
---|---|---|
-10的补码 | 1111 1111 1111 1111 1111 1111 1111 0110 | -10 |
~(-10) 按位取反 | 0000 0000 0000 0000 0000 0000 0000 1001 | 9 |
赋值的时候,二进制首位是0, 所以将其当做正数来处理,而 正数的补码与原码一致,不用 处理 |
0000 0000 0000 0000 0000 0000 0000 1001 | 9 |
注意点:数据在存储的时候,以其补码为准
网友评论