官术网_书友最值得收藏!

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。

主站蜘蛛池模板: 寿阳县| 孝昌县| 津市市| 宁晋县| 杂多县| 安塞县| 香港| 湖口县| 临泉县| 普兰店市| 阿勒泰市| 高邑县| 杭州市| 祁东县| 泸溪县| 沭阳县| 大姚县| 兴隆县| 象山县| 靖西县| 大埔区| 平和县| 松潘县| 博白县| 甘南县| 板桥市| 安国市| 乌什县| 遵化市| 左贡县| 奉贤区| 固阳县| 万宁市| 察隅县| 金塔县| 肥城市| 宜章县| 金川县| 莱西市| 湘潭县| 云龙县|