c語言中的位和位域以及如何訪問它們

2021-10-03 01:21:23 字數 1163 閱讀 5155

首先定義乙個變數,以下均以設定此變數的第二位為例.

unsigned

char ch;

1、位的置1

使用按位或運算子

一般用法:

ch=

0x00

;ch |

=0x02

;

通用用法:

int i;\\存放需要置1的位

ch |=1

<一般用法:

ch=

0x02

;ch &

=0xfc

;

通用用法:

unsigned

int i=

2;\\存放需要置0的位

ch &=~

(1<;

3、位的測試

unsigned

int i;\\存放需要測試的位

if(ch &

1<1、修改位域

修改位域先使用按位與清除位域,再使用按位或存入位域,下以將111存入變數 ch 2-4位為例

一般用法:

ch=ch &

0xf1

|0x0e

通用用法:

unsigned

int i;\\存放需要儲存的值

ch=ch &

0xf1

| i<<

(n-1

)\\n

為修改位域的最低位

2、獲取位域

獲取位域分兩種情況

(1)獲取的位域在數的右端

i=ch &

0x07

;\\獲取ch的第1

-3位

(2)獲取的位域不在數的右端

先使用移位運算子將位域移到最右端,再使用上述方法。

3、異或加密

(1)加密

將資料與密匙進行疑惑運算

(2)解密

將加密後的資料再次加密

C語言中位域

引自 這是c語言位域 冒號 問題 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為...

C語言中的位域

struct 位域結構名 1 使用位域可能不如使用位運算子的執行速度快,但是位域使程式更容易閱讀。2 如果某個作用域中定義了位域結構,則在該作用域中就不能使用typedef或 define來定義與位域結構名相同的型別名。3 在之前的標準中,位域型別必須是int unsigned int或signed...

C語言中的位域

2 當相鄰成員的型別不同時,不同的編譯器有不同的實現方案,gcc會壓縮儲存,而vc vs不會 請看下面的位域 bs include int main printf d n sizeof struct bs return 0 3 如果成員之間穿插著非位域成員,那麼不會進行壓縮。例如對於下面的 bs i...