- Scala編程(第5版)
- (德)馬丁·奧德斯基等
- 590字
- 2022-05-06 15:51:41
5.7 位運算操作
Scala允許用若干位運算方法對整數類型執行位運算操作。位運算方法有:按位與(&)、按位或(|)和按位異或(^)。[8]一元的位補碼操作(~,方法名為unary_~)對操作元的每一位取反。例如:

第一個表達式,即1 & 2會對1(0001)和2(0010)的每一位執行按位與操作,交出0(0000)。第二個表達式,即1 | 2會對同一組操作元的每一位執行按位或操作,交出3(0011)。第三個表達式,即1 ^ 2會對1(0001)和3(0011)的每一位執行按位異或操作,交出2(0010)。最后一個表達式,即~1會對1(0001)的每一位取反,交出-2,用二進制表示是這樣的:11111111111111111111111111111110。
Scala整數類型還提供了3個位移(shift)方法,即左移(<<)、右移(>>)和無符號右移(>>>)。當位移方法被用在中綴操作符表示法時,會將左側的整數值移動右側整數值的量。左移和無符號右移方法會自動填充0。而右移方法會用左側值的最高位(符號位)來填充。下面是一些示例:

-1用二進制表示是1111111111111111111111。在第一個例子中,-1 >> 31,-1被右移了31位。由于Int是32位的,這個操作實際上將最左邊的位一直向右移動,直到它成為最右邊的位。[9]由于右移方法在右移過程中用1來填充(因為-1的最左位是1),結果與原始的左操作元完全一致,即32個為1的位,也就是-1。在第二個例子中,-1 >>> 31,最左邊的位再次被向右一直移動到最右邊,不過這次填充的是0,因此結果是00000000000000000000000000000001,即1。在最后的示例中,1 << 2,左操作元1被左移了兩個位置(用0填充),結果得到00000000000000000000000000000100,即4。