C語言位操作

馬可波羅來華發表於2020-09-23

在C語言中,可以單獨操控變數的位(bit),一般高階語言不會處理這級別的細節,C在提供高階語言便利的同時,還能為組合語言所保留的級別上工作,這使其成為編寫裝置驅動程式和嵌入式程式碼的首選語言。

二進位制整數(binary)

通常,1位元組包含8位,C語言用位元組(byte)表示儲存系統字符集所需的大小,從左往右,分別給這8位分別編號7~0,在一位元組中,編號是7的位被稱為高階位,編號為0的位被稱為低階位
該位元組能表達的最大數字:1111 1111,為255,最小值為:0000 0000,為0,所以一位元組可儲存0~255範圍內的數字,總共256個值。或者通過不同的方式解釋位組合,程式可以用1位元組儲存 -128 ~ +127範圍內的整數,總共還是256個值。
通常,unsigned char 用一位元組標識的範圍是0~255,而signed char 表示的範圍是 -128 ~ +127.

有符號整數

如何表示有符號整數取決於硬體本身,而不是C語言。一般有三種方式:

  • 符號量表示法:用一位儲存符號,剩下的7位表示數字本身。如1000 0001表示-1,0000 0001表示+1。其表示範圍是-127 ~ +127,但是有兩個0:-0和+0,容易混淆。
  • 二進位制補碼:最常用,高階位為0則是正,為1則為負。正數的表示和符號量表示法一樣,負數則是正數的反碼+1.如+127為0111 1111,則負數的二進位制補碼為:1000 0001。負數128為1000 0000。正數為0000 0001,-1則表示為1111 1111.該方法可以表示-128至+127.
  • 二進位制反碼: 通過反轉位組合中的每一位形成一個負數。如0000 0001表示1,則1111 1110表示-1,只有一個-0:1111 1111.該方法能表示-127至+127 。

八進位制(octal)

每一個八進位制位對應3個二進位制位。
如八進位制 0377,二進位制表示為000 011 111 111
八進位制123,二進位制表示為001 010 011。

十六進位制(hex)

每個十六進位制數用四個二位數表示。
如0xF3,二進位制為1111 0011
0xB9,二進位制為1011 1001 。

相關文章