按位运算符
1、“与”、“位与”(&)
按位“与”操作符,如果两个数的二进制,相同位数都是1,则该位结果是1,否则是0.
例子 13&11
13的二进制是 1101 1 1 01
(都为1相同结果为1) (不相同结果为0)
11的二进制是 1011 1 0 11
则结果是 1001 转为十进制是9。
2、“或”、“位或”(|)
按位“或”操作符,如果两个数的二进制,相同位数有一个是1,则该位结果是1,否则是0
例子 13|11
13的二进制是 1101 1 1 01
(都为1结果为1) (有一个为1结果为1)
11的二进制是 1011 1 0 11
则结果是 1111 转为十进制是15。
3、“异或、“位异或”(^)
按位“异或”操作符,如果两个数的二进制,相同位数只有一个是1,则该位结果是1,否则是0
例子 13^11
13的二进制是 1101 1 1 01
(都为1结果为0) (有一个为1结果为1)
11的二进制是 1011 1 0 11
则结果是 0110 转为十进制是6。
4、“非”、“位非”(~)也称为取反操作符
按位“非”操作符,属于一元操作符,只对一个操作数进行操作,(其他按位操作符是二元操作符)。按位“非”生成与输入位相反的值,——若输入0,则输出1,若输入1,则输出0。
例子 ~13
13的二进制是 0000 0000 0000 1101
则~13标识为 1111 1111 1111 0010 转为十进制为-14
下面说一下为什么1111 1111 1111 0010表示-14
我们负数转换成二进制的步骤:
1、首先取出这个数的原码的二进制
2、然后再求出反码
3、最后求出补码
求-14用二进制表示
-14的原码是 1000 0000 0000 1110
求出反码的是 1111 1111 1111 0001
求出补码是 1111 1111 1111 0010
Java移位操作符
移位操作符操作的运算对象也是二进制的“位”。移位操作符只可用来处理整数类型,左移位操作符(<<)能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0),“有符号”右移位操作符(>>)则按照操作符右侧指定的位数将操作符左边的操作数向右移。“有符号”右移位操作符使用“符号扩展”;若符号位正,则在高位插入0;若符号位负。则在高位插入1。
例子 13<<2(相当于13*2^2)
13的二进制是 0000 0000 0000 1101
左移两位 0000 0000 0011 0100 十进制为52
例子 13>>2(相当于13/2^2)
13的二进制是 0000 0000 0000 1101
左移两位 0000 0000 0000 0011 十进制为3