Java位操作
虽然应用场景不多,但是一些源码里却出现了很多次。并非没有用。
在计算机中,所有数值都是 二进制数值。
byte 1个字节 8位
short 2个字节 16位
int 4个字节
long 8个字节
float 4个字节
double 8个字节
char 1个字节
boolean 1位
操作对象
数值
在计算机中所有数都是以补码形式存储,
正数最高位 0,
负数最高位 1,
正数三码合一,
负数原码、反码、补码 分别应:
对应正数最高位变1、最高位外 所有位取反、补(加)1
原码
一个数字转换成二进制就是它的原码,如:
int a=5;
//0000 0000 0000 0000
//0000 0000 0000 0101
-5 即在 5最高位用1
//1000 0000 0000 0000
//0000 0000 0000 0101
反码
分两种情况,正数反码即是原码,负数是 符号位不变的基础上 其他位取反。
补码
也分两种情况,正数补码即原码,负数补码是 反码加1。
操作符
& 与运算符
从低到高对应,都是1 则是 1,其他都是 0
| 或运算符
有一个1 就是 1,否则 0
~ 取反
对每一位进行操作,1变 0 ,0 变1
^ 异或运算符
两个操作位 不一样是 1,一样是 0
>> 右移运算符
a>>b
将数值a的二进制数 向右 移 b位,高位空出来的补零
a<<b 左移运算符
向左移b位,空出来的低位 补零