C語言常用基礎位操作

2021-08-08 01:22:28 字數 770 閱讀 9676

1、使用下面的**將最右邊的1改變為0,假如沒有1則結果為0(e.g.,01011000=>01010000):

x & (x-1)

此**可以用來判斷乙個無符號的整數是否為2的冪,假如x & (x-1)==1,則x為2的冪,否則x不為2的冪

2、相似地,下面的**可以用來判斷乙個無符號的整數是否具備2n-1的格式(包括n=0、1)

x & (x+1)

3、下面的**將隔離最右邊的1,假如右邊沒有1則結果返回0 (e.g., 01011000 =>00001000):

x & (-x)

4、下面的**將隔離最右邊的0,假如右邊沒有0則結果返回0 (e.g., 10100111 =>00001000):

~x & (x+1)

5、下面的**都可以用來產生乙個掩碼,用來保留尾部的0,假如x=0則返回全1位元組 (e.g., 01011000 =>00000111):

~x & (x-1) 或 ~(x | -x) 或 (x & -x)-1

6、下面的**用來產生乙個掩碼,用來保留最右邊的1與尾部所有的0,假如x=0則返回全1位元組(e.g., 01011000 =>00001111):

x ^ (x-1)

7、下面的**用來將最右邊的1右邊的0全部改為1,假如x=0則返回全1位元組(e.g., 01011000 = >01011111):

x | (x-1)

8、下面的**將最右邊的1臨近的1取反 (e.g., 01011000 =>01000000):

((x | (x-1))+1) & x

C語言基礎 位操作

按位取反 按位或 按位或 移位運算子 二 位欄位 4個按位邏輯運算子都用於整數資料,包括char 之所以叫做按位運算,是因為這些操作都是針對每乙個位進行的。不影響它左右兩邊的位。不能混淆於邏輯運算子 和 10010011 00111101 表示式 00010001 結果值用法 掩碼 所謂掩碼指的是一...

C 位操作基礎

運算子 含義按位反 按位與按位或 按位異或 左移右移 1 按位反 一元運算子,逐位取反,產生二進位制反碼 例 10010001 01101110 2 按位與 二元運算子,逐位比較,都真才真 1 1 1 例 10010001 00110000 00010000 3 按位或 二元運算子,逐位比較,有真即...

C語言位操作

在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用 位運算 來 完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功 能,這使得c語言也能像組合語言一樣用來編寫系統程式。位運算子c語言提供了六種位運算...