常用位操作

2021-08-14 09:01:25 字數 1136 閱讀 6372

x

^0s = x; x & 0s = 0; x | 0s = x;x^

1s = ~x; x & 1s = x; x | 1s = 1s;

x^ x = 0; x & x = x; x | x = x;

a^ b^ a = b;

a^ a^ b = b;

該方法將1左移i位, 得到形如00010000的值。接著,對這個值和num執行「位與」操作,從而將i位之外的所有位清零。最後,檢查該結果是否為零。不為零說明i位為1, 否則,i位為0。

bool getbit(int num, int i)

setbit先將1左移i位,得到形如00010000的值。接著,對這個值和num執行「位或」操作,這樣只會改變i位的資料。該掩碼i位除外的位均為零,故而不會影響num的其餘位。

int setbit(int num, int i)

該方法與setbit剛好相反。首先,將1左移1位取得形如00010000的值,對這個值取反進而得到類似11101111的掩碼。接著,對該掩碼和num執行「位與」操作。這樣只會清零num的i位,其餘位則保持不變。

int clearbit(int num, int i)

將num最高位至i位(含)清零的做法如下:

int clearbitsmsbthroughi(int num, int i)

將i位至0位(含)清零的做法如下:

int clearbitsithrough0(int num, int i)

這個方法將setbit與clearbit合二為一。首先,用諸如1110111的掩碼將num的第i位清零。接著,將待寫入值v(0或1)左移i位,得到乙個i位為v但其餘位都為0的數。最後,對之前取得的兩個結果執行「位或」操作,v為1則將num的i位更新為1,否則該位仍為0。

int updatebit(int num, int i, int v)

常用位操作

參加運算的兩個資料,按二進位制位進行 與 運算。運算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩位同時為 1 結果才為 1 否則為0 例如 3 5 即 0000 0011 0000 0101 0000 0001 因此,3 5的值得1。另,負數按補碼形式參加按位與運算。與運算 的特殊用...

java常用位操作

public class testindex else if len 0 return result 將乙個高位在前的位元組陣列轉為int param num return public static byte inttobytes int num 將乙個高位在前的位元組陣列轉為int param ...

常用的位操作

191.位1的個數 231.2的冪 本文分兩部分,第一部分列舉幾個有趣的位操作,第二部分講解演算法中常用的 n n 1 操作,順便把用到這個技巧的演算法題列出來講解一下。因為位操作很簡單,所以假設讀者已經了解與 或 異或這三種基本操作。位操作 bit manipulation 可以玩出很多奇技淫巧,...