>=
邏輯運算OR
比力運算小於
( )
是將數值的位元向右移動n個位元。向右移動後,超越貯存局限的數字捨去,而左側多出的位元就補上0。
負號
11
=
除了 AND 運算之外,OR 運算的特質在於「a 與 b 只要有 1 者為 1 則 a | b 一定為 1」,若 b 為 0,則 a | b 則為 a 的原值,所以可說 OR 運算有「堆疊」或「加法」的結果,相對於 AND 運算用於剪裁影像或判斷權限,OR 運算則用於「影象重疊」或「付與權限」,類似地,NOT運算可用於「影象反白」或「獲得 清掃權限」或「獲得遮罩」影象。
+
/
if ( a != 0 && b != 0) { ... } // 接連兩個 && 是邏輯判定的 AND if ( a && b ) { ... } // 同上 if ( a & b ) { ... } // 這是 AND 位元運算,假如 a bitwise-AND b 的成效不為零... char * ptr = & a; // & 當一元運算子的時辰是對變數取位址
總之 C/C++有這四種位元運算子,可用於任何資料型別,意即該型別有幾個 bits 就做幾個 bits 的運算:
前提運算子
-
到這裡你可能會問,這些位元運算有甚麼用處呢?其適用途很多,例如說,例用 AND運算子「a 與 b 均為 1 的時刻才會 1」的性質,換言之「如果 b 為 0 的話,a 不論幾何、a AND b 必定為 0」,另一方面若是 b 為 1,那麼 a AND b 就等於是 a 的原值,哄騙這個性質,就能夠以 b 做為 a 的遮罩(mask),或稱做過濾器。
電路中最根基的邏輯運算子以下所列,可說是工程人員都耳熟能詳地,假定有 A 和 B 兩個 bit,即它們的值只有 0 和 1 兩種,那麼 A AND B 只有在二者皆為 1 的時刻才會 1,A OR B 則是二者有ㄧ者為1的時辰就會1,而A XOR B 是 A 與 B 不相等的時刻為 1,NOT 則是純真地 0 變 1、1 變 0翻譯
7 <= |
運算子優先挨次 位元運算XOR |
為甚麼要進修2進位與16進位呢?從這個表上你可以清晰地見到16進位每個數字就恰好好代表了 4 bits,例如 0xcd = 1100 1101:
<< 8 |
& 位元運算OR |
所以我們只要一看到一個以16進位的數值,很直覺地就能夠知道這個數字的各 bit 為何,因此在程式中以16進位來透露表現要進行位元運算(bitwise operation)的數字長短常利便的,不然就得換算了。 乘法 請注意 2進位/10進位/16進位只是(撰寫程式碼)的時辰暗示數值的格式,不是電腦貯存數值的花樣翻譯電腦貯存數值必然是 bit by bit 的、也可以說必然是 2 進位的,然則認識分歧進位之間的換算與示意法,依然對寫程式大有匡助。
|
a = 0xcd; // 和 a = 205 是一樣的
而 printf( ) 或其他的字串花樣化與顯示函式都有 16 進位的顯示花樣,就是 %x (小寫顯示) 或 %X (大寫顯示) 花樣字串要害字,例如: |
>>位元運算子 ==
比較運算不等於
要在2進位/10進位/16進位之間換算,其實最好的工具就是 Windows 內附的小算盤(calc.exe),以下圖,起首在檢視選單下,將小算盤切換到「工程型」,然後這個程式就會多出下圖密密層層的按鈕,接著選擇你要輸入數字的數值進制而且輸入數值,例如華頓翻譯公司要輸入10進位的205,所以我選擇了「十進位」然後輸入205,然後只要點選其他的數值進制,顯示的數字就會釀成其余進制,例如在圖中我點選十六進制,205 就釀成了CD,點選了二進位,205就釀成了11001101。 * 205 (10進位) = 2 x 102 + 0 x 101 + 5 x 100 4 printf("%x",a); // 顯示 cd printf("%X",a); // 顯示 CD 運算子 <<位元運算子 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
比力希奇的是 XOR運算,他的特點是「a和b分歧的時刻 a^b 才 1,不然 a^b 必為 0」,所以 (a^b)^b 等於 a 自己,以影象處理來說,A影象對 B 影像做 XOR,會把 B 影象堆疊在 A 之上(然則部門像素會反白),然後再對同一張 B 影象做一次 XOR 則能夠恢復 A 的原貌,所以 XOR 可以做到影像的「臨時」堆疊 (或移動中的影象),早年常常用於簡單動畫、滑鼠游標或輔助線的顯示上翻譯 | 申明 |
! 除法 unsigned char a = 205 (十進位) = 1100 1101 (二進位) unsigned char b = 158 (十進位) = 1001 1110 (二進位) a AND b: c=a & b = 140 (十進位) = 1000 1100 (二進位) 在這個例子傍邊的 & 運算子就是 C/C++ 的 AND 位元運算子,從這個例子可以看到 & 運算子劃分對 unsigned char 的 8 bits 做了 AND 位元運算。 3 減法 下面這個例子展現了 C 語言中四種位元運算子的利用方式,請注意註解中的履行了局 c,和原始數值 a 與 b 對照,便可知道這些運算子的結果翻譯 |
!=
對照運算等於 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
當華頓翻譯公司們說一個數字是 205 的時刻,事實上我們常常隱喻了它是個10進位數字,我們之所以把這個數字寫成 "205" 是因為: 餘數 2 位元運算AND |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
將數值的位元向左移動n個位元翻譯向左移動後,超越貯存局限的數字捨去,右側位元則補上0。 AND 的運算的一個常見用處則是用在權限經管上,所謂使用者 a 對物品 b 的權限,該當是「 a 有權限使用物品、而 b 剛也有開放被使用的權限」的時刻,a 才得以使用 b 物品,假如 a 有利用物品的權限然則 b 不是公然物品,那麼 a 無法利用 b 物品,換言之,如果 b 是公開物品,然則 a 沒有利用任何物品的權限(好比權限品級只是訪客品級),a 也不克不及利用 b 物品,所以很顯然地「a 是不是有權限使用物品 b」是一個 AND 運算,舉個例子來說: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
而 C/C++ 的位元處置運算子也是如斯,分歧的是這些運算子可以一次處置懲罰多個位元,例如 unsigned char 有 8 bits,那麼:
利用者 OpenJohn 的權限 bits: 0001 0011 意義 000x xxxx → not owner xxx1 00xx → 可讀group文件 xxxx xx11 → 可讀寫公開文件 而 ++ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?: 對照運算大於等於 > 對照運算大於 以下內文出自: https://blog.xuite.net/tsai.oktomy/program/67226142-%E4%BD%8D%E5%85%83%E9%81%8B%E7%AE%97%E5%AD%90+%2有關各國語文翻譯公證的問題歡迎諮詢華頓翻譯公司02-77260932 |