一、進製基礎知識
1、通常,1位元組(byte)包含8位(bit)。c語言用位元組表示儲存系統字符集所需的大小。
2、對於乙個1位元組8位的二進位制數,最右邊(第0位)是最低階位,最左邊(第1位)是最高端位,第幾位表示2的指數大小。
3、1位元組(8位)可儲存256個值,unsigned char用1位元組表示的範圍是0-255,signed char用1位元組表示的範圍是(-128)-(+127)。
4、每個8進製位對應3個二進位制位,每個16進製制位對應4個二進位制位。
5、補碼反碼等與有符號整數有關的部分省略。
二、c操控位工具(2)——按位運算子
注意:按位運算子操作的位不會改變其它位。
邏輯運算子的優先順序低於算數運算子。
1、按位邏輯運算子 ~ & | ^
1.1、二進位制按位取反運算子~
簡單來說就是每一位都取相反數,1變成0,0變成1,規則如下:
(~1) = 0,(~0) = 1
示例如下:
~(10011010) //結果為01100101,每一位都取相反數
1.2、二進位制按位與運算子&
簡單來說全為1則結果為1,不全為1或者全不為1則結果為0,規則如下:
1 & 1 = 1,1 & 0 = 0, 0 & 0 = 0,結果操作位在運算子左右位置無關
示例如下:
(10000011) & (00111101) //結果為00000001,只有最後一位全為1
1.3、二進位制按位或運算子|
簡單來說就是有1(全為1或者不全為1)則結果為1,全不為1(全為0)則結果為0,規則如下:
1 | 1 = 1,1 | 0 = 1, 0 | 0 = 0,結果操作位在運算子左右位置無關
示例如下:
(10000010) | (01111100) //結果為11111110,只有最後一位全為0
1.4、二進位制按位異或運算子^
簡單來說就是操作位數值相同(全為0或者全為1)為0,相反(乙個0乙個1)為1,規則如下:
1 ^ 1 = 0,1 ^ 0 = 1, 0 ^ 0 = 0,結果操作位在運算子左右位置無關
示例如下:
(10000010) ^ (01111110) //結果為11111100,最第為全為0,第二位全為1,其它位均相反
1.5、應用
根據按位邏輯運算子可進行開啟位(設定位)、關閉位(清空位)、切換位、檢查位的值等操作。
2、移位運算子
注意:移位運算子向左或者向右移位,被移出的位直接丟棄,移進的位補0。
2.1、左移運算子<<
示例如下:
(10001010) << 2//結果為00101000
2.2、右移運算子》
示例如下:
(10001010) >> 2//結果為00100010
2.3、應用
針對2的冪可快速進行有效的乘法和除法,類似十進位制中移動小數點來乘以或除以10,如下所示:
number << n //表示number乘以2的n次冪
number >> n //
若number非負,則用number除以2的n次冪
三、c操控位工具(2)——位欄位
1、位欄位簡介
位字段是乙個signed int或者unsigned int型別變數中的一組相鄰的位,需通過乙個結構體宣告來建立,該結構為每個字段提供標籤,並確定該字段的寬度。如下所示:
/*定義乙個包含4個成員變數的結構體prnt,每個成員的位寬為1
*/struct
prnt;
/*為結構體成員賦值
*/prnt.itals = 0
; prnt.undln = 1
;
/*定義乙個包含2個成員變數的結構體prcode,成員變數位寬不一
*/struct
prcode;
/*為結構體成員賦值
*/prcode.code1 = 3; /*
*< code1最大可賦值3
*/prcode.code1 = 100; /*
*< 賦值範圍在0-255中均可
*/
變數prnt會prcode被儲存在int大小的記憶體單元中。
2、宣告的總位數超過範圍的解決方法
如果宣告的總位數超過乙個unsigned int型別的大小,則會用到下乙個unsigned int型別的儲存位置。乙個欄位不允許跨越兩個unsigned int之間的邊界。編譯器會自動移動跨界的字段,保持
unsigned int的邊界對齊。一旦發生這種情況,第乙個unsigned int 中會保留乙個未命名的"洞",可用此未命名的洞來填充超過的位數。如下所示:
structstuff;
位字段在unsigned int中儲存的位置根據機器而定,有些從右往左順序儲存,有些則從左往右,由於這些原因位欄位通常都不容易移植。
C語言基礎知識整理 四
進行巨集字串連線,在巨集中把引數解釋為字串,不可以在語句中直接使用。在巨集定義中,printf s n s 會被解釋為printf s n s include include define trace s printf s n s s int main 輸出為a strhello 在第三次列印中,巨...
C語言基礎知識 指標操作
概述 主要講述指標的遞增 遞減 加法 指標加上整數 減法 指標減去整數 和指標相減 下面描述指標變數的基本操作,通過程式來說明 定義乙個陣列和5個指標 int urn 5 int ptr1,ptr2,ptr3,ptr4 可以把位址賦給指標。例如用陣列名 帶位址運算子 的變數名 另乙個指標進行賦值。p...
大學必備C語言基礎知識(四)
七 c c 運算子 運算子不僅具有不同的優先順序,還有不同的結合性。在表示式中,各運算量參與運算的先後順序不僅要遵守運算子優先順序別的規定,還要受運算子結合性的制約,以便確定是自左向右進行運算還是自右向左進行運算。1 運算子分類 運算子 說明 算術運算子 用於各類數值運算。包括加 減 乘 除 求餘 ...