位操作符與列舉型別總結(1)

2021-06-22 15:32:27 字數 1249 閱讀 7016

表示離散值的兩種方法:一種是用位表示離散值,還有一種是把離散值作為有限集中的元素。

容易忘記的知識點:  

1、補碼

非負整數n的補碼表示形式就是n的二進位制位字串。如果我們對位字串進行按位求反,並把結果加上1,我們就得到了-n的補碼、

2、左移位和右移位

移位操作符的左右兩個運算元都必須是整型表示式,每個運算元都會執行型別的提公升。整個表示式的型別就是經過提公升後的左操作符的型別。

例如:char c = 'z';

當進行c << 1移位的時候,它被提公升為int型,當移位表示式進行求值的時候,兩個運算元分別會執行整型提公升,整個表示式的型別就是經過提公升後的做操作符的型別。因此像c<<1這樣的表示式的值是按照4個位元組儲存的。

3、移位操作符的優先順序和結合型

a<< b >> 1  等價於  (a << b) >> 1

a << 1 + 2 << 3 等價於 (a<<(1+2)) << 3

a + b << 12 * a >> b 等價於((a+b)<<(12*a))>>b

4、掩碼

掩碼是乙個常量或者是變數,用於從另乙個變數或表示式提取所需要的位,由於int常量1的二進位制表示式入下:00000000 00000000 00000000 00000001

它可以用於確定乙個int表示式的低端位,下面的**使用了這個掩碼,列印出乙個0和1交替的序列。如果想找到乙個數字的某個位置上的數字,那麼把掩碼的該位置為1進行與操作就可以得到。

例子:void bit_print(int a)

}例子解讀:上面的例子功能是輸出乙個整數的二進位制數:其中 int mask = 1 << (n-1); 這條語句是把1進行移位,移到該二進位制位數的最高位。putchar(((a&mask) == 0)? 『0』:『1』); 這條語句,是把每乙個輸入的數字與mask進行與運算,對每個數字的最高位與運算之後輸出最高位的二進位制。 之後a<<1把a向左移位,改變最高位,進行下一次迴圈的輸出。

5、包裝和解包

使用位表示式可以根據位元組對邊界資料進行壓縮。這不僅有利於節省空間,更重要的是有助於節省時間。在一台字長4位元組的機器上,每個指令週期並行處理32位。下面這個函式可以把4個字元包裝成乙個int,使用移位操作進行基於位元組的包裝。

#include

int pack(char a,char b,char c,char d)

程式解讀:上面程式打包a,b,c,d成為p並利用列印函式,列印結果。

解包:#include

char unpack(int p,int k)

1 位操作符

本文用來記錄學習筆記 位與 用來給某一位進行寫0操作 與1位與無變化,與0位與變成0 特定位清零 例 0xaa 0xf0 0xa0 位或 用來給某一位進行寫1操作 與0或與無變化,與1位或變成1 特定位置1。例 0xaa 0xf0 0xfa 位異或 用來給某一位進行取反操作 與0位異或無變化,與1位...

Java位操作符使用總結

由於在平時寫 時,不經常使用位操作符,然而,在看jdk的原始碼中,經常會遇到位操作符。為了避免每次都要去網上或者書上查一下位操作符的用法,特此,寫了這篇文章,用以備忘。現在,言歸正傳。按位與操作符 如果兩個輸入位為1,則結果位也是1,否則,結果位為0。int x 12 int y 13 int z1...

c語言操作符 位操作符 移位操作符

1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...