二进制 && 位操作.

概论

计算中的任何数据都是由二进制表示,因为IC(Integrated Circuit)集成电路的引脚只有直流电压0V5V两个状态,也就是一个IC引脚只能表示两个状态,和二进制 0 1 契合

二进制数0000 0101 转成10进制数结果为5 = 1*2^2 + 0*2^1 +1*2^0 = 4 + 0 + 1 = 5 即数值和位权相乘后相加

正数和负数的表示

通常将数的二进制最高位作为符号位,1表示负数,0 表示正数

10进制数1 的二进制数为:0000 0001, 负数为 :~1 + 1 = -2 + 1 =-1

v取反:

正数:-(v+1)

负数 |v| -1

正数取反结果为负数,负数取反结果为整数

任何数取反加一的结果都为该数的相反数

正加负减(-(v+1))

以下数取反后的值
10 -11
1 -2
-2 1
-5 4
-6 5

位移

只有右移时才能区分出逻辑位移算术位移

java中 >> 为算术右移,>>> 为逻辑位移

int x = -4;
int y = -4 >>2;// -1
int z = -4 >>>2; // 1073741823

逻辑位移

补零就行了

算术位移

将二进制数作为带符号的数值进行运算时,移位后需要在最高位补充符号位(0或者1)

浮点数

符号、尾数、基数、指数

双精度(64bit)

符号部分(1bit) + 指数部分(11bit) + 尾数部分(52bit)

单精度(32bit)

符号部分(1bit) + 指数部分(8bit) + 尾数部分(23bit)