在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用「位運算」來完成所有的運算和操作。
一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功能, 這使得c語言也能像組合語言一樣用來編寫系統程式。
位運算子c語言提供了六種位運算子:
& 按位與
| 按位或
^ 按位異或
~ 取反
<< 左移
>> 右移
1. 按位與運算
按位與運算子"&"是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。
例如:9&5可寫算式如下: 00001001 (9的二進位制補碼)&00000101 (5的二進位制補碼) 00000001 (1的二進位制補碼)可見9&5=1。
按位與運算通常用來對某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 運算 ( 255 的二進位制數為0000000011111111)。
應用:
a. 清零特定位 (mask中特定位置0,其它位為1,s=s&mask)
b. 取某數中指定位 (mask中特定位置1,其它位為0,s=s&mask)
2. 按位或運算
按位或運算子「|」是雙目運算子。其功能是參與運算的兩數各對應的二進位相或。
只要對應的二個二進位有乙個為1時,結果位就為1。參與運算的兩個數均以補碼出現。
例如:9|5可寫算式如下:
00001001|00000101
00001101 (十進位制為13)可見9|5=13
應用:
常用來將源運算元某些位置1,其它位不變。 (mask中特定位置1,其它位為0 s=s|mask)
3. 按位異或運算
按位異或運算子「^」是雙目運算子。其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數仍以補碼出現,例如9^5可寫成算式如下:
00001001^00000101 00001100 (十進位制為12)
應用:
a. 使特定位的值取反 (mask中特定位置1,其它位為0 s=s^mask)
b. 不引入第三變數,交換兩個變數的值 (設 a=a1,b=b1)
目 標 操 作 操作後狀態
a = a^b
b = a^b
a = a^b
4. 求反運算
求反運算子~為單目運
算符,具有右結合性。其功能是對參與運算的數的各二進位按位求反。例如~9的運算為: ~(0000000000001001)結果為:1111111111110110
5. 左移運算
左移運算子「<<」是雙目運算子。其功能把「<< 」左邊的運算數的各二進位全部左移若干位,由「<<」右邊的數指定移動的位數, 高位丟棄,低位補0。 其值相當於乘2。例如: a<<4 指把a的各二進位向左移動4位。如a=00000011(十進位制3),左移4位後為00110000(十進位制48)。
6. 右移運算
右移運算子「>>」是雙目運算子。其功能是把「>> 」左邊的運算數的各二進位全部右移若干位,「>>」右邊的數指定移動的位數。其值相當於除2。
例如:設 a=15,a>>2 表示把000001111右移為00000011(十進位制3)。對於左邊移出的空位,如果是正數則空位補0,若為負數,可能補0或補1,這取決於所用的計算機系統。移入0的叫邏輯右移,移入1的叫算術右移,turbo c採用邏輯右移。
main()
再看一例:
main()
浮點數的儲存格式:
浮點數的儲存格式是
符號+階碼(定點整數)+尾數(定點小數)
seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm
即1位符號位(0為正,1為負),8位指數字,23位尾數字
浮點數儲存前先轉化成2的k次方形式,即:
f = a1*2^k + a2*2^(k-1) + ... + ak +... +an*2^(-m) (ai = , a1 = 1)
如5.5=2^2 + 2^0 + 2^(-1)
其中的k就是指數,加127後組成8位指數字
5.5的指數字就是2+127 = 129 = 10000001
a2a3.....an就是尾數字,不足23位後補0
所以5.5 = 01000000101000000000000000000000 = 40a00000
所以,對浮點數*2、/2只要對8位符號位+、- 即可,但不是左移、右移
C語言中的位運算
0 推薦 在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用 位運算 來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功能,這使得c語言也能像組合語言一樣用來編寫系統程式。位運算子c語言提供了六種...
C語言中的位運算
c語言中的位運算有六個 按位與 按位或 按位異或 取反 左移 右移 除 以外其餘均為二元運算子,即要求運算子兩側均有乙個運算量 位運算量只能為整型或字元型,不能為實型資料。1.按位與 0 0 0 0 1 0 1 0 0 1 1 1 3 5 00000011 00000101 00000001 1 的...
C語言中的位運算
在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用 位運算 來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功能,這使得c語言也能像組合語言一樣用來編寫系統程式。位運算子c語言提供了六種位運算子 ...