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