1、按位操作符
按位操作符用来操作整数基本数据类型中的单个“比特”(bit),即二进制位。按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。
按位“与”:&
如果两个输入位都是1,则输出位为1;否则输出位为0;
按位“或”:|
如果两个输入位只要有一个为1,则输出位为1;只有在两个输入位都是0的情况下,输出位才是0;
按位“异或”:^
如果输入位的某一个是1,但不全是1,那么输出位为1
按位“非”:~,也称为取反操作符,它是一元操作符,只对一个操作数进行操作
若输入0,则输出1,;若输入1,则输出0;
由于位是非常“小”的,所以按位操作符仅使用了一个字符
按位操作符可与等号(=)联合使用,以便合并运算和赋值:&=、|=、^=都是合法的,“~”是一元操作符,不可以与“=”联合使用
2、移位操作符
移位操作符的运算对象也是二进制的“位”。移位操作符只可用来处理整数类型。
左移位操作符(<<)能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0)
“有符号”右移位操作符(>>)则按照操作符右侧指定的位数将操作符左边的操作数向右移动。
“有符号”右移位操作符使用“符号扩展”:若符号为正,则在高位插入0;若符号为负,则再高位插入1。
“无符号”右移位操作符(>>>),使用“零扩展”:无论正负,都在高位插入0。
如果对char、byte或者short类型的数值进行移位处理,那么在移位进行之前,它们会被转换为int类型,并且得到的结果也是一个int类型的值。只有数值右端的低5位才有用。
若对long类型的数值进行处理,最后得到结果也是long。
“移位”可与“等号”(<<=或>>=或>>>=)组合使用。操作符左边的值会移动由右边的值指定的位数,再将得到的结果赋给左边的变量。
在进行“无符号”右移位结果赋值操作时,可能会遇到一个问题:如果对byte或short值进行这样的移位运算,得到的可能不是正确的结果。它们会先被转换成int类型,再进行右移操作,然后被截断,赋值给原来的类型,这样的情况下可能得到-1的结果。
左移1位相当于当前整数的数值*2
左移2位相当于当前整数的数值*4
......
右移1位相当于当前整数的数值/2
右移2位相当于当前整数的数值/4