位運算子
如何使用位運算子
移位運算
結束語位運算是以二進位制數的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,則該位...