C語言按位運算子 按位邏輯運算 移位運算 及其用法

2021-10-11 18:38:59 字數 1833 閱讀 2251

c語言提供了四種按位邏輯運算子

注:他們的運算元必須是整數。

1.按位取反(~)

~運算子把0變為1,把1變為0,如下例子所示:

~(0100 1001)=10110110,

這裡需要注意的是

假設val的型別是unsigned char,已被賦值為2。在二進位制中,0000 0010表示2。那麼,~val的值是 1111 1101,即253。注意,該運算子不會改變val的值,但是可以這樣用:val = ~val。 或者直接宣告乙個新的變數newval = ~val。

2.按位與(&)

&運算子通過逐位比較產生乙個新值,如果把1看為真,0看為假,運算規則可以記為同真則真,一假則假。如下例子所示:

(1001 0011)&(0011 1101)=(0001 0001)

3.按位或(|)

|運算子通過逐位比較產生新值,如果把1看為真,0看為假,運算規則可以記為一真則真。如下例子所示:

(1001 0011)|(0011 1101)=(1011 1111)

4.按位異或(^)

^運算子通過逐位比較產生新值,如果兩個運算物件中只有乙個為1(但不是兩個都為1),結果為1。如下例子所示:

(1001 0011)^(0011 1101)= (1010 1110)

c有乙個按位異或和賦值運算結合的運算子:^=.

1.左移

表示式1 << 位數

將表示式1左移運算子右側指定位數,移出左末端位的值丟,用0填充空出的位置。

2.右移

表示式1 >>位數

將表示式1右移運算子右側指定位數,移出右末端的值丟掉,對於無符號型別,用0填充空出的位置;對於有符號型別,其結果取決於機器。空出的位置可用0填充,或者填充符號位原本的數字。如下例子所示:

(1000 1010)>>2 //表示式,有符號值

(0010 0010) //在某些系統中的值

(1000 1010)>>2 //表示式,有符號值

(1110 0010) //在另某一些系統中的值

下面是無符號值的例子:

(1000 1010)>>2

(0010 0010)

3.位移運算子用法

移位運算子針對2的冪提供快速的乘法和除法

number<<2

number乘以2的n次冪

number>>2

如果number 為非負,則用number除以2的n次冪

例題(選自c primer plus)

假設用乙個unsigned long 型別的值表示顏色值,低階位位元組儲存紅色的強度,下乙個位元組儲存綠的的強度,第三個位元組儲存藍色的強度。隨後你希望把每種顏色的強度分別儲存在3個不同的unsigned char型別的變數中。那麼,可以使用下面的語句:

#define byte_mask 0xff

unsigned

long color =

0x002a162f

;unsigned

char bule, green, red;

red = color & byte_mask 0xff

;green =

(color >>8)

& byte_mask 0xff

;blue =

(color >>16)

& byte_mask 0xff

;

邏輯運算與按位運算

邏輯運算 一 和 的區別 單 時,左邊無論真假,右邊都進行運算 雙 時,左true,右邊參與運算 左false,那麼右邊不參與運算。二 和 的區別 單 時,左邊無論真假,右邊都進行運算 雙 時,左true時,右邊不參與運算。按位運算 一 按位與 運算規則 除了 1 1 1,其它都是 0 system...

C語言按位運算子

c語言按位運算子 二進位制反碼或按位取反 一元運算子 是逐位將1變為 0,0變為 1eg 1001 1010 result 0110 0101 按位與 二元運算子 是逐位比較兩個運算物件,生成乙個新值 對每乙個位上來說,只有當全為 1時,才為 1,否則為 0 也就是全真為真,一假則假 eg 1001...

按位運算子

基本運算子 按位與運算子,可以對變數s的特定位清零,這時可以設定乙個變數mask,將mask中的特定位賦值為0,其他位置為1,然後作運算 s s mask 即可特定位清零。使用按位與運算,可以取變數s的指定位的值,這時可以設定乙個變數mask,將mask中的指定位賦值為1,其他位置賦值為0,然後作運...