一丶 计算机基础
1.1 走进0与1的世界
计算机就是晶体管,电炉管组装起来的电子设备,无论是图形图像的渲染,网络远程共享,还是大数据计算,归根接地都是0与1的信号处理.信息储存和逻辑计算的元数据只能是0与1,他们在不同介质里的物理表现方式不同.(二进制运算自行研究).
以电路为例,一条电路线在计算机中被称为1位,即1个bit,简写b.8个bit组成一个单位,称为一个字节,即1个Byte,简写B.1024个Byte,简写为KB;1024个KB,简写为MB;1024MB,简写为GB,这些都是计算机中常用的储存计量单位.
位移运算:
不易理解不常用,熟悉是指 "大牛" 在代码中经常使用这种方式进行行高低位的截取,哈希计算,甚至运用在乘除法运算中.
移位:移位操作符有俩种,左移位<< 和 右移位>> , 其中类似于+=这种操作符一样,也有<<= 和 >>= .
左移:例如5<<2表示5向左移动俩位 5的二进制是101 ,左移俩位之后就是10100 也就是乘以4即等于20
对于位数左移之后,低位的补0
例如10000......0000(即最小数),那么它左移2位之后,它的二进制表达就是00000.....0000000(即为0)
public class Text {
public static void main(String[] args) {
int max = Integer.MIN_VALUE;
System.out.println(Integer.toBinaryString(max));
System.out.println(Integer.toBinaryString(max<<2));
}
}
运行结果:
10000000000000000000000000000000
0
右移: 和左移不一样的地方就是:如果被位移的数是负数,那么右移之后,高位全部补1;如果是整数,那么位移之后,高位全部补0.也就是整数依然是正数,负数依然是负数.
无符号右移 : 这种位移操作与右移操作不同的地方就是: 无论是正数还是负数,在位移之后,高位都补0.即位移之后永远都是正数.
注意:
(1) 无论是左移还是右移(包括无符号右移),都有一个共同原则.如果移动的位数超过规定的bit数,都会与最大位移数取模之后进行计算
例如 : int型 32bit 5<<33 就是 5<<1;同理,右移和无符号右移也是一样 long类型也是一样
(2) 对于byte和short进行位移运算的时候,他们会被转换为int型.进行右移的时候,因为精度的原因(byte和short本身比int字节少,因转换为int计算完毕,再转换回去的时候,可能对高位截断
位与,或,异或,非
与:俩个bit都位1的时候,结果为1,否则为0
或:俩个其中有一个为1即为1,否则为0
异或:相同为0,相异为1
非:0变1 , 1变0
&和&&、|和||的异同
对于boolean类型的数据,&和&&,|和||的计算结果相同。但是这里有一处区别,按位与和按位或需要操作计算两个二进制的计算结果。但是如果是逻辑或,逻辑与,会有短路效应。可能只需要根据其中一个条件就可以判断了,例如true||false只需要判断前面一个就可以了,false&&false就只需要判断前面一个就知道为false