java深入解析-第2章 运算符与表达式2

1、int类型占用4字节,32位,而long类型占用8字节,64位。3种移位运算符,<<、>>和无符号右移>>>,当左侧操作数为int类型或long类型时,如果右侧操作数大于31或63,系统会做如下处理:

  • 若左侧为int,右侧操作数如果是负数先转换成补码,与掩码0x1f做与运算,也就是只有低五位是有效的,然后左侧操作数再移动相应的位数。同理,左侧为long时,是取6位有效。

2、乘除与移位不完全一样。如果不能整除,结果都是向0舍入的,也就是向0的方向取值。具体情况如表:

数值/操作 乘以2的n次方与左移n位 除以2的n次方与右移n位
正数(可以整除) 相等(无舍入) 相等(无舍入)
正数(可以整除) 相等(无舍入) 相等(都向下舍入)
0 相等(无舍入) 相等(无舍入)
负数(可以整除) 相等(无舍入) 相等(无舍入)
负数(不能整除) 相等(无舍入) 相等(相除向上舍入,移位向下舍入)

3、>>>位无符号右移运算符,其余>>不同的是,>>>是以0来填补左侧移出的空位,而>>是以符号位来填补左侧移出的空位。如果是负数,>>>就可能移出正数值来。
4、一个变量x异或另一个变量y两次,结果的值为x。异或运算可以交换两个变量的值,并且这种方式比相加交换的方式更可取。

  • x=x^y; y=x^y; x=x^y

5、有关switch:

  • switch表达式可以是byte、short、char、int、Byte、Short、Character、Integer、String或枚举类型。
  • case表达式必须是常量表达式或枚举常量名,并且其类型尅赋值给switch表达式类型。
  • switch表达式的类型为基本数据类型的包装类型时,将包装类型拆箱为基本数据类型。
  • 当switch类型为枚举类型时,会创建一个匿名类来辅助完成。
  • 当switch类型为String类型时,将switch语句拆分为两个switch语句,分别为String对象的哈希码及临时变量来辅助完成。

你可能感兴趣的:(java深入解析-第2章 运算符与表达式2)