关于位运算,之前也见过,搜过,当时会用了,事后就忘了,今天好好学习一遍,而后整理一下。html
Java中的位运算,涉及到计算机的二进制,位用bit表示,1Byte=8bit,根据各类基本数据类型占用的字节空间,能够计算各类数据有多少二进制,能够算出对应的取值范围。java
java中的位运算包括:与(&)、或(|)、异或(^)和非(~);学习
移位运算包括:左移运算(<<)、右移运算(>>)和无符号右移运算(>>>),没有无符号左移运算。htm
前提:数字与数字位运算,都会先装换成二进制,下面不在重复,都默认转成二进制。get
一、与(&)运算,两个数字与运算就是对比相同位的数字,都为1则为1,不然为0.it
举例:3&4的值为多少? 3的二进制11,4的二进制100,没数字用0补齐,则是011对100,没有都为1的状况,则3&4的二进制结果为000,转换10数据类型
进制也为0.二进制
二、或(|)运算,两个数字对比以后,有一个为1则为1。数据
举例:3|4的值为多少? 011对100,结果为111,转换为10进制为7。计算机
三、异或(^)运算,对比以后,不一样的为1,相同的为0。
举例:3^4的值为多少?011对100,结果为111,转换为10进制为7。
四、非(~)也叫取反运算,1变0,0变1。具体的变化这里设涉及到原码反码和补码,我单独写个帖子。
五、左移运算符(<<),将二进制的数据向左移动对应位数,低位用0补齐。
举例:3<<1,11变为110,转换为10进制变为6。
六、右移运算符(>>),将二进制的数据向右移动对应位数,若是是正数高位用0补齐,负数高位用1补齐。
举例:3>>1,11变为1,转换为10进制变为1。-3>>1 为-2.
七、无符号右移运算(>>>),将二进制的数据向右移动对应位数,高位所有用0补齐。
举例:3>>>1,11变为1,转换为10进制变为1。-3>>>1 为2147483646。