基本类型和操作之位操作符

Scala包含了可以对整数类型的单个位执行操作的若干位操作方法:按位与运算(&)、按位或运算(|)和按位异或运算(^)。一元按位取补操作符(也就是按位非)(~ ,unary_~),反转它的操作数的每一位。
按位与(&):两个bit串按位进行逻辑与,全1为1,有0为0。
按位或(|):两个bit串按位进行逻辑或,有1为1,全0为0。
按位异或(^):两个bit串按位进行异或操作,相同为0,相异为1。
按位非(~):bit串逐位取反。

基本类型和操作之位操作符_第1张图片

第一个表达式,1 & 2,对1(0001)和2(0010)的每一位进行与运算,产生0(0000)。
第二个表达式,1 | 2,对同样的操作数的每一位执行或运算,产生3(0011)。
第三个表达式,1^ 3,异或1(0001)和3(0011)的每一位,产生2(0010)。
最后的表达式,~1,翻转1(0001)的所有位,产生了-2,二进制看起来是:1111 1111 1111 1111 1111 1111 1111 1111。

Scala整数类型还提供了三个位移方法,分别是左移(<<)、右移(>>)和无符号右移(>>>)。以中缀操作符方式使用时,位移方法会按照右侧指定的整数值次数逐位移动左侧的整数。左移和无符号右移在移动的时候填入0右移则在移动时填入左则整数的最高位(符号位)。
左移(<<):补0。(注:对于正数,x << n 相当于 x 乘以 2的n次方 )
右移(>>):符号位是0补0,是1补1。(注:对于正数,x >> n 相当于 x 除以 2的n次方)
无符号右移(>>>):补0。
举例如下:

基本类型和操作之位操作符_第2张图片

你可能感兴趣的:(scala)