& 按位与
Column 0 | Column 1 | Column 2 | Column 3 | Column 4 |
---|---|---|---|---|
操作数 1 | 0 | 0 | 1 | 1 |
操作数 2 | 0 | 1 | 0 | 1 |
操作符& | 0 | 0 | 0 | 1 |
总结:只有同为1,结果才是1;
| 按位或
Column 0 | Column 1 | Column 2 | Column 3 | Column 4 |
---|---|---|---|---|
操作数 1 | 0 | 0 | 1 | 1 |
操作数 2 | 0 | 1 | 0 | 1 |
操作符丨 | 0 | 1 | 1 | 1 |
总结:只要有一个数字是1,结果为1; |
~ 按位非
Column 0 | Column 1 | Column2 |
---|---|---|
操作数 | 0 | 1 |
操作符~ | 1 | 0 |
^ 按位异或
Column 0 | Column 1 | Column 2 | Column 3 | Column 4 |
---|---|---|---|---|
操作数 1 | 0 | 0 | 1 | 1 |
操作数 2 | 0 | 1 | 0 | 1 |
操作符 ^ | 0 | 1 | 1 | 0 |
总结:相同为0,不同为1; |
<< 左位移
Java使用 补 码 来 表 示 二 进 制 数 ,在补 码 表 示 中 ,最高 位 为 符号 位 ,正数 的 符 号 位 为 0,负数 为 1。补 码 的 规 定 如 下 :
对 正 数 来 说 ,最高位为 0,其余 各 位 代 表 数 值 本 身 (以二 进制 表 示 ),如 10的补码 为 0000 1010。
对 负 数 而 言 ,把该 数 绝 对 值 的 二进制码 按 位 取 反 ,然后 对 整 个数 加 1,即得 该 数的 补 码 。
比如-10的补码如何获取:
第一步:获取10的二进制码 | 0000 0000 0000 0000 0000 0000 0000 1010 |
---|---|
第二步:取反 | 1111 1111 1111 1111 1111 1111 1111 0101 |
第三步:加1 | 1111 1111 1111 1111 1111 1111 1111 0110 |
为何有那么多0、1?java中int是32位的。
先介绍一下Java的二进制数,我们再来看看左位移这个运算符号是什么意思?
”>>"表示向左移动:高位溢出,低位补0;(低位添加了多少个0,高位就会溢出多少位)
举个列子:
int num = 2<<3;//向左移3位;10 ->10000;答案应该为16;
再来看看下面这个列子:
Integer num = Integer.MAX_VALUE;
num =num<<1;
答案是:-2;
总结一下:<<(左位移),其实就是在右边加n个0,在最左边(最高位)截取,去掉n位数的高位;保持总数32不变;
>> 右位移
低位溢出,符号位不变,并用符号位补溢出的高位。
如果是正数,右移后,用0来填充高位;
如果是负数,右移后,用1来填充高位
例子:
正数:右移后,高位用0填充:
负数:高位用1来填充;
>>> 无符号右移
低位溢出,高位补0;(所以能从负数能得到正数;)
举例: