操作符的理解六
移位操作符操作的运算对象也是二进制的“位”。移位操作符只可用来处理整数类型(基本类型的一种)。左移位操作符(<<)能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0)。“有符号”右移位操作符(>>)则按照操作符右侧指定的位数将操作符左边的操作数向右移动。“有符号”右移位操作符使用“符号扩展”:若符号为正,则在高位插入0;若符号为负,则在高位插入1。Java中增加了一种“无符号”右移位操作符(>>>),它使用“零扩散”:无论正负,都在高位插入0。
如果对char、byte或者short类型的数值进行移位处理,那么在移位进行之前,它们会被转换为int类型,并且得到的结果也是一个int类型的值。只有数值右端的低5位才有用。这样可防止我们移位超过int型值所具有的位数。(译注:因为2的5次方为32,而int型值只有32位。)若对一个long类型的数值进行处理,最后得到的结果也是long。此时只会用到数值右端的低6位,以防止移位超过long型数值具有的位数。
“移位”可与“等号”(<<=或>>=或>>>=)组合使用。此时,操作符左边的值会移动由右边的值指定的位数,再将得到的结果赋给左边的变量。但在进行“无符号”右移位结合赋值操作时,可能会遇到一个问题:如果对byte或short值进行这样的移位运算,得到的可能不是正确的结果。它们会先被转换成int类型,再进行右移操作,然后被截断,赋值给原来的类型,在这种情况下可能得到-1的结果。
两个方法:printBinaryInt()和printBinaryLong()。它们分别接受int或long型的参数,并用二进制格式输出,同时附有简要的说明文字。注意最高位表示符号:0为正,1为负。
数字的二进制表示形式称为“有符号的二进制补码”。
2、三元操作符if-else
三元操作符也称为条件操作符,它显得比较特别,因为它有三个操作数;但它确实属于操作符的一种,因为它最终也会生成一个值,这与普通if-else语句是不同的。其表达式采取下述形式:
boolean-exp ?value0 : value1
如果boolean-exp (布尔表达式)的结果为true,就计算value0 ,而且这个计算结果也就是操作符最终产生的值。如果boolean-exp的结果为false,就计算value1,同样,它的结果也就成为了操作符最终产生的值。
当然,也可以换用普通的if-else语句,但三元操作符更加简洁。条件操作符与if-else完全不同,因为它会产生一个值。