C語言情報之位運算

2021-10-07 06:51:22 字數 4996 閱讀 1485

位運算子

如何使用位運算子

移位運算

結束語位運算是以二進位制數的0或1表示的位為單位計算的。

在***的確認中經常使用,也是理解pc的結構不可缺少的專案。

在c語言中,通過使用後面說明的位運算子,可以簡單地進行計算,所以要理解結構。

pc以二進位制數計算是乙個簡單的計算公式,因此處理速度往往會非常快。

在處理數百萬到成千上萬畫素的影象時,通常會通過位運算來計算耗時的處理。

另外,由於記憶體使用量也有少的傾向,所以像微型計算機一樣使用記憶體少的硬體的情況下,也經常用位運算來計算。

位運算子是用於計算位的運算子。

就像我們在計算的時候想到的加法的「+」之類的東西。

位運算子的型別

位運算子說明&

right-aligned and。當兩者都為1時,將其設定為1,否則將其設定為0的運算子

|or。只有當兩者都為0時才為0。否則將其設定為1的運算子

^xor。當兩者都是不同的值時1。其他為0的運算子

~not。0是1,1是將其反轉為0的運算子

>>

通過移位運算向右偏移。它類似於十進位制數所說的位移動,移動所有位的位。運算方法根據考慮或不考慮符號而不同

<<

通過移位運算向左偏移

在這裡,因為c語言的編譯器使用gcc,所以像「0b1010」一樣,在數值的開頭加上「0b」處理2進製數。

請注意,根據環境的不同,即使加上「0b」也不能作為二進位制數來處理。

&運算子被標記為a&b,a和b都是1時為1,其他為0的運算子。

用程式看那個情況確認一下吧。

注意,我們通常使用printf函式來顯示執行結果,但是printf函式不能顯示二進位制數。

因此,我們建立了乙個二進位制顯示函式,並顯示了計算結果。

#include

// 二進位制數表示的函式

void

printbi

(int num)

printf

("0b");

for(

int i =

0; i < len; i++)}

intmain

(void

)

執行結果:

二進位制數:0b0001

(十進位制數:1

)

上述的程式,把num1和num2 and運算的結果變數代入result。

通過比較num1和num2的相同位數的位,您可以從程式中確認只有當兩者為1時才為1。

另外,簡單說明二進位制數表示用的函式printbi。

我們正在使用變數x檢查哪個位數的值是1。

首先,在表示式「1<>」將返回的值移位到第一位,並將結果儲存在陣列位元素中。

然後,由於每個數字的值被儲存在陣列位的每個元素中,所以它乙個接乙個地顯示。

|運算子被標記為a|b,它是乙個運算子,如果a和b都是0,則返回0,否則是1。用程式看那個情況確認一下吧。

#include

// 二進位制數表示的函式

void

printbi

(int num)

printf

("0b");

for(

int i =

0; i < len; i++)}

intmain

(void

)

執行結果:

二進位制數:0b0111

(十進位制數:7

)

上述的程式,num1和num2 or運算的結果變數result代入。

通過比較num1和num2的相同位數的位,您可以從程式中確認,如果兩者都為0,則為0,否則為1。

運算子標記為a^b,在a和b不同的情況下返回1,a和b在相同的情況下返回0。

用程式看那個情況確認一下吧。

#include

// 二進位制數表示的函式

void

printbi

(int num)

printf

("0b");

for(

int i =

0; i < len; i++)}

intmain

(void

)

執行結果:

二進位制數:0b0110

(十進位制數:6

)

上述的程式,num1和num2 xor運算,其結果變數result代入。

通過比較num1和num2的相同位數的位,您可以從程式中確認只有當兩者不同時才為1。

運算子是表示為~a,a為1時為0,a為0時為1的運算子。

這被稱為位反轉。

在位反轉的情況下,也需要考慮負值,所以我們使用char型別以8位簡單易懂的方式進行解釋。

int型別取決於16位或32位,因為計算結果會發生變化。

讓我們在實際程式中確認一下。

#include

// 二進位制數表示的函式

void

printbi

(char num)

printf

("0b");

for(

int i =

0; i < len; i++)}

intmain

(void

)

執行結果:

二進位制數:0b11111111

(十進位制數:-1)

二進位制數:0b11110000

(十進位制數:-

16)

上述的程式,2進製數0和2進製數1111反轉表示。

可以確認,0是1,1是0,0是0。

順便說一下,在帶符號的二進位制數中,最左筷子表示符號。

這叫做補數。0表示正數,1表示負數。

因此,如果在十進位制數中以二進位制數反轉正數,則在十進位制數中為負值。負值的二進位制數字是通過反轉所有位並新增1來建立的。

作為應用的使用方法,解說移位運算的使用方法。

移位運算是位的位移動。

int型的話16bit還是32bit根據環境的不同而變化,所以使用char型簡單易懂地用8bit進行解說。

因為以二進位制數為基準來考慮,所以向左移動的話值就會翻倍,向右移動的話值就會變成1/2。

另外,需要注意的是,如果移位操作中的數字溢位,則不會成為正確的值。

左移運算子(<<)標記為a<<1,是將以二進位制數表示的a向左移動一位數的運算子。

左移時,左側溢位的位將被刪除,右側將新增0。

讓我們在實際程式中檢查左移運算。

#include

// 二進位制數表示的函式

void

printbi

(char num)

printf

("0b");

for(

int i =

0; i < len; i++)}

intmain

(void

)

執行結果:

14

二進位制數:0b00011100

(十進位制數:28

)

上述的程式num 2進製「0000 1110」進入,num 1位左移的結果變數result代入表示。

如果將該二進位制數向左移位一位數,則為「0001 1100」,因為向左偏移位數。在右端新增了0。

如果將其修改為十進位制數,則是原始值「14」乘以兩倍的值「28」。

右移運算子(>>)標記為a>>1,是將以二進位制數表示的a向右移動一位數的運算子。右移時,右側溢位的位將被刪除,左側將新增0。

讓我們在實際程式中檢查右移運算。

#include

// 二進位制數表示的函式

void

printbi

(char num)

printf

("0b");

for(

int i =

0; i < len; i++)}

intmain

(void

)

執行結果:

14

二進位制數:0b00000111

(十進位制數:7

)

上述的程式num 2進製「0000 1110」進入,num 1位右移的結果變數result代入表示。右移將數字移動到右邊。

將「0000 1110」向右移位一位數,所以為「0000 0111」。

右邊的數字將被刪除,左邊的數字將被新增到0。

如果將其修改為十進位制數,則將原始值「14」設定為1/2的值的「7」。

移位運算包括邏輯移位和算術移位。

邏輯移位簡單地移位所有的位。

在算術移位的情況下,移位最高有效位以外的位,以便符號不變。

請注意,在負數移位運算中,只有在右移的情況下,移位的部分左側才會新增1。

讓我們來看看實際的程式。

#include

// 二進位制數表示的函式

void

printbi

(char num)

printf

("0b");

for(

int i =

0; i < len; i++)}

intmain

(void

)

執行結果:

-

14二進位制數:0b11111001

(十進位制數:-

7)

在上述程式中,變數num包含「1111 0010」。

在負值的情況下,左端是表示符號的位,所以即使向右移動符號也不會改變,左端進入1。因此,成為「1111 1001」。

如果將其修改為十進位制數,則將原始值「-14」設定為1/2的值的「-7」。

位運算包括and運算子、or運算子、xor運算子、not運算子、右移運算子和左移運算子。

c語言位運算

c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 按位或 兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 是一元運算子,用來對乙個二進位制數按位取反,即將0變1...

C語言位運算

c語言位運算 位運算應用口訣 清零取反要用與,某位置一可用或 若要取反和交換,輕輕鬆鬆用異或 移位運算 1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。2 am p 3 amp amp amp qu ot 右 移 右邊 的位被擠 掉。對於 左邊移出 的空位,如果是正 數則空位 補0,若 ...

C語言位運算

位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...