Java中的位運算

2021-07-07 10:08:51 字數 1070 閱讀 9038

要搞清楚移位運算,首先要搞清楚位元組數。jvm保證了原始型別的位元組數不受作業系統影響,無論是16位,32位或64位作業系統。

boolean 1 位,char 16 位 我們常說的乙個字元佔兩個位元組,byte 8 位 即乙個位元組short 16 位,int 32 位,long 64 位,float 32 位,double 64 位。

一般數值都是帶符號的,從左往右數,數值型別的第一位是表示正負的,0為正1為負。

*要獲得乙個負數的二進位制表示:用正數值按位取反再加一(注意這裡的加一不是負數計算中的加一,就是正數的加一)表示負數值。例如int i=1;實際上就是:

0….00001(int是32位,前面有31個0),而-1實際上是1按位取反::1….11110(31個1)::再加一::1….1111(32個1)

*要獲得乙個負數形式的二進位制表示的十進位制值,也是除了第一位符號位外其它位都按位取反再加一,然後加上負號。

弄清楚了各種型別的位元組數已經正負符號,所有的位運算操作符就變得簡單了。

一、按位運算:對二進位制位(bit)進行布林代數,並得到結果。

按位運算一般來說只處理整數。(short,int,long)。如果乙個小型別與乙個大型別運算,小型別自動補齊大型別所需要的位數。

&兩個bit都是1,則結果是1,否則都是0。-1&1=1

|兩個bit都是0,則結果是0,否則都是1。-1|1=-1

異或^兩個bit不一樣,則結果是1,否則是0。-1^1=-2

非~,只對乙個bit進行運算。~-1=0

二.移位運算將二進位制向乙個方向移動給出的位數。

a<<2,表示將a的二進位制表示向左移動兩位,低位補0。在沒移出去的情況下(要是int型別左移32,那就完全移出去了,得到32個0),左移一位表示乘以2。

a>>10表示向右移動十位,若a為正,則高位補0,若為負則補1。 右移不存在移出去的問題,右移就表示除以2取整。

>>>無論正負高位都補0。

位運算可以用來做hash

static int hash(int paramint)

現在應該能看懂這個hash函式在幹嘛了吧。

Java 中的位運算

移位運算子 包括 右移 左移 無符號右移 例子 5 3 1 1111 1111 1111 1111 1111 1111 1111 1011 1111 1111 1111 1111 1111 1111 1111 1111 其結果與 math.floor double 5 2 2 2 完全相同。5 3 ...

Java 中的位運算

計算機中的原碼 反碼和補碼 移位運算子 包括 右移 左移 無符號右移 例子 5 3 1 1111 1111 1111 1111 1111 1111 1111 1011 1111 1111 1111 1111 1111 1111 1111 1111 其結果與 math.floor double 5 2...

Java 中的位運算

移位運算子 包括 右移 左移 無符號右移 例子 5 3 1 1111 1111 1111 1111 1111 1111 1111 1011 1111 1111 1111 1111 1111 1111 1111 1111 其結果與 math.floor double 5 2 2 2 完全相同。5 3 ...