位運算 樣例

2021-08-06 00:16:15 字數 2291 閱讀 9264

取乙個整數 a 從右端開始的 4~7 位

(1)先使 a 右移 4 位

a >> 4;

(2)設定乙個低 4 位全為 1 ,其餘全為 0 的數,可以用下面方法實現:

~(~0<<4)

~0 的全部二進位制為 1 ,左移 4 位,這樣右端低 4 位為 0。

(3)將上面二者進行 & 運算。

a >> 4 & ~(~0<<4)

include void main()

迴圈移位

include void main()

12.3 位段

以前曾介紹過對記憶體中資訊的訪問,訪問一般以位元組為單位,實際上,有時儲存乙個資訊不必用乙個或多個位元組,例如,真 或 假 用 0 或 1 ,只需 1 位即可,在計算機用於過程控制,引數檢測或是資料通訊領域時,控制資訊往往只佔乙個位元組中的乙個或幾個二進位,常常在一直位元組中放幾個資訊。

向乙個位元組中的乙個或幾個二進拉賦值和改變它的值可以用以下兩種方法:

(1)可以人為的地在兩個位元組 data 中設幾個項。例如 a, b, c, d分別佔 2 位,6 位,4位,4位。如果想將 c 的值改變為 12 (設原來為0)

a. 將數12 左移 4 位,使1100 成為右面起第 4 ~ 7位。

b. 將 data 與 12 << 4 進行按拉或,即可以使 c 的值變成 12。

(2)位段

c 語言允許在乙個結構體中以位為單元來指定其成員所佔記憶體長度,這種以位為單元的成員稱為 位段 或稱 位域,利用位段能夠用較少的位數儲存資料。例如:

struct packed_data

unsigned a : 2;

unsigned b : 6;

unsigned c : 4;

undigned d : 4;

int i;

}data;

其中 a, b, c, d 分別佔2 位,6位,4位,4位,i 為整型。

也可以使各個位段不恰好佔滿乙個位元組。如:

struct packed_data

unsigned a : 2;

unsigned b : 3;

unsigned c : 4;

int i;

};struct packed_data data;

其中 a, b, c 共佔 9 位,佔 1 個位元組多,不到 2 個位元組,它後面為 int 型。在 a, b, c 之後的 7 位空間閒置不用,i 從別乙個位元組開頭起存放。

注意,在儲存單元中位段的空間分配方向,因機器而異,在微機使用的 c系統中,一般是由右到左進行分配的,但使用者可以不必過問這種細節。

對位段中的資料引用的方法。如:

data.a = 2;

data.b = 7;

data.c = 9;

注意位段允許的最大值範圍如果寫

data.a = 8;

就錯了,因為 data.a 只佔兩個位,最大值為 3。在些情況下,自動取賦的數的低位。例如 8 的二進位制形式為 1000 ,而 data.a 只有 2 位,取 1000 的低 2 位,故 data.a 得值 0。

關於位段的定義和引用說明:

(1)位段成員的型別必須指定為 unsigned int 型別。

(2)若某一位段要從另乙個字開始存放。可以用以下形式定義

unsigned a : 1;

unsigned b : 2;

unsigned : 0;

unsigned c : 3;

本來 a, b, c 應連續存放在乙個儲存單元中,由於中了長度為 0 的位段,其作用是使下乙個位段從下一下個儲存單元開始存放,因此,現在只將 a, b 儲存在乙個儲存中,c 另存放在下乙個單元。

(3)乙個位段必須儲存在同乙個儲存單元中,不能跨兩個單元,如果第乙個單元空間不能容納下乙個位段,則該空間不用,而從下乙個單元起存放該位段。

(4)可以定義無名字段。如:

unsigned a :1;

unsigned : 2;

unsigned b : 3;// 這兩位空間不用

unsigned c : 4;

(5)位段的長度不能大於儲存單元的長度,也不能定義位段陣列。

(6)位段可以用整型格式輸出。如:

printf(「%d, %d, %d」, data.a, data.b, data.c);

當然也可以用 %u, %o, %x, 等格式輸出。

(7)位段可以在資料表示式中引用,它會被系統自動轉換成整型數。如:

data.a + 5 / data.b

是合法的。

位運算(1) 初識位運算

前段時間數電課學了些進製轉換,還有與或非等邏輯運算,如今再來看看位運算,倒輕鬆了不少。很早就想寫些非總結性部落格了,奈何還是太懶。也也不知怎的突然又來了興致,趕忙寫下這篇部落格。廢話不多說,今天準備總結總結關於位運算的知識。程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的,即0 1兩種狀態,...

位運算子和位運算

一 按位與 運算子 1 運算規則 參加運算的兩個 資料,按二進位進行 與 運算,如果兩個相應的二進位都為1,則該位的結果值為1,否則為0,即 0 0 0,0 1 0,1 0 0,1 1 1.2 用途 1 清零 運算物件 原來的數中為1的位,新數中相應位為0。2 取乙個數中某些指定位。如想要取乙個整數...

位運算子與位運算

位運算是對二進位制位的操作,它應用於整形資料,把整形資料看成固定的二進位制序列,然後對二進位制序列進行位運算 按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例c a b a 1010...