C語言基礎知識 四 位操作

2022-09-07 22:15:21 字數 2967 閱讀 9177

一、進製基礎知識

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 中會保留乙個未命名的"洞",可用此未命名的洞來填充超過的位數。如下所示:

struct

stuff;

位字段在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 運算子分類 運算子 說明 算術運算子 用於各類數值運算。包括加 減 乘 除 求餘 ...