1、按位操作符

按位操作符用来操作整数基本数据类型中的单个“比特”(bit),即二进制位。按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。

按位“与”:&

如果两个输入位都是1,则输出位为1;否则输出位为0;

按位“或”:|

如果两个输入位只要有一个为1,则输出位为1;只有在两个输入位都是0的情况下,输出位才是0;

按位“异或”:^

如果输入位的某一个是1,但不全是1,那么输出位为1

按位“非”:~,也称为取反操作符,它是一元操作符,只对一个操作数进行操作

若输入0,则输出1,;若输入1,则输出0;

由于位是非常“小”的,所以按位操作符仅使用了一个字符

按位操作符可与等号(=)联合使用,以便合并运算和赋值:&=、|=、^=都是合法的,“~”是一元操作符,不可以与“=”联合使用

bit 对应Java数据类型 java bit操作_操作符

2、移位操作符

移位操作符的运算对象也是二进制的“位”。移位操作符只可用来处理整数类型。

左移位操作符(<<)能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0)

“有符号”右移位操作符(>>)则按照操作符右侧指定的位数将操作符左边的操作数向右移动。

“有符号”右移位操作符使用“符号扩展”:若符号为正,则在高位插入0;若符号为负,则再高位插入1。

“无符号”右移位操作符(>>>),使用“零扩展”:无论正负,都在高位插入0。

如果对char、byte或者short类型的数值进行移位处理,那么在移位进行之前,它们会被转换为int类型,并且得到的结果也是一个int类型的值。只有数值右端的低5位才有用。

若对long类型的数值进行处理,最后得到结果也是long。

“移位”可与“等号”(<<=或>>=或>>>=)组合使用。操作符左边的值会移动由右边的值指定的位数,再将得到的结果赋给左边的变量。

在进行“无符号”右移位结果赋值操作时,可能会遇到一个问题:如果对byte或short值进行这样的移位运算,得到的可能不是正确的结果。它们会先被转换成int类型,再进行右移操作,然后被截断,赋值给原来的类型,这样的情况下可能得到-1的结果。

bit 对应Java数据类型 java bit操作_bit 对应Java数据类型_02

bit 对应Java数据类型 java bit操作_操作符_03



bit 对应Java数据类型 java bit操作_操作数_04

bit 对应Java数据类型 java bit操作_bit 对应Java数据类型_05

bit 对应Java数据类型 java bit操作_bit 对应Java数据类型_06

bit 对应Java数据类型 java bit操作_操作数_07

bit 对应Java数据类型 java bit操作_赋值_08

bit 对应Java数据类型 java bit操作_java_09

左移1位相当于当前整数的数值*2

左移2位相当于当前整数的数值*4

......

右移1位相当于当前整数的数值/2

右移2位相当于当前整数的数值/4