1. 原码反码补码:
计算机存储数据都是以二进制存储
byte
8位
short
16位
int
32位
long
64位
其中 最高位为符号位,0代表正数,1为负数,并且负数以补码的形式存在和参与计算,如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。
关于原码,反码,补码
原码 即正确的值。
反码 正数不变,负数反码 符号位不变,其余取反。
补码 正数不变,负数为反码+1。
负数(-2)原码反码例如:
原码 1000 0010
反码 1111 1101
补码 1111 1110
2. 位移运算
-
a << b
左移运算
二进制形式的a左移b位,b小于总位数,左端舍去,右端补零,正负可能发生变化。 -
a >> b
右移运算
二进制形式的a右移b位,b小于总位数,右端舍去,左边正数补0,负数补1。 -
a >>> b
无符号右移运算
二进制形式的a左移b位,b小于总位数,右端舍去,左端补零
3. 与,或,异或,非
位运算.png&
同1则1
|
同0则0
^
相同为零,不同为1
~
取反
应用:
-
&
取特定位 -
|
某位 置1 -
^
特定位取反
例如 :
public static void main(String[] args) {
int b = -7;
/**
* 取特定位
* 假设要取b的低四位
* 则需要低四位全为1,其余为0
* 即 0000 0000 0000 0000 0000 0000 0000 1111
* 即0xf
*/
System.out.println(Integer.toBinaryString(b)); //1111 1111 1111 1111 1111 1111 1111 1001
System.out.println(Integer.toBinaryString(b&0xf)); //1001
/**
* 取特定位 某位置0
* 假设要取b的第五位
* 则需要第五位为1,其余为0
* 即 0000 0000 0000 0000 0000 0000 0001 0000
* 即0x10
* 右移 5-1 >>> 4
*/
System.out.println(Integer.toBinaryString(b)); //1111 1111 1111 1111 1111 1111 1111 1001
System.out.println(Integer.toBinaryString(b&0x10>>>4)); //1
//--------------------------------------------------------------
/**
* | 某位 置1;
* 假设要b的第3位 置1
* 则需要一个 该位为1,其余为0的数
* 即0000 0000 0000 0000 0000 0000 0000 0100
* 即0x4
*/
System.out.println(Integer.toBinaryString(b)); //1111 1111 1111 1111 1111 1111 1111 1001
System.out.println(Integer.toBinaryString(b|0x4)); //1111 1111 1111 1111 1111 1111 1111 1101
//----------------------------------------------------------------
/**
* ^ 使特定位取反
* 假设需要b低4位取反
* 则需要 一个低四位为1,其余为0的数
* 即 0000 0000 0000 0000 0000 0000 0000 1111
* 即 0xf
*/
System.out.println(Integer.toBinaryString(b)); //1111 1111 1111 1111 1111 1111 1111 1001
System.out.println(Integer.toBinaryString(b^0xf)); //1111 1111 1111 1111 1111 1111 1111 0110
/**
* 假设需要b第2位取反
* 则需要 一个第3位为1,其余为0的数
* 即 0000 0000 0000 0000 0000 0000 0000 0010
* 即 0x2
*/
System.out.println(Integer.toBinaryString(b)); //1111 1111 1111 1111 1111 1111 1111 1001
System.out.println(Integer.toBinaryString(b^0x2)); //1111 1111 1111 1111 1111 1111 1111 1011
}
4.复合赋值运算符
位运算符与赋值运算符结合,组成新的复合赋值运算符,它们是:
&=
例:a &= b
相当于a=a & b
|=
例:a |= b
相当于a=a | b
>>=
例:a >>= b
相当于a=a >> b
<<=
例:a <<= b
相当于a=a << b
^=
例:a ^= b
相当于a=a ^ b
网友评论