c語言中的位運算子
位運算子直接對bit位進行操作,其效率最高
注意:位與符號是乙個&,兩個&&是邏輯與。
1.位與操作的特點,只有1和1位與結果為1,其餘全是0。
2.位與和邏輯與的區別:位與兩個運算元按照二進位制位批次對應位相與的,邏輯與兩個
操縱數作為整體來相與的。
例1:0b1010 1010 & 0b1111 0000 = 0b1010 0000;
例2:0b1010 1010 && 0b1111 0000 = 1(只要不全為0,都為真)
注意:位或符號是乙個|,兩個||是邏輯或
1. 位或操作的特點是:只有兩個0相位或才能得到0,只要有乙個1個1結果就一定是1
2. 位或和邏輯或的區別:位或兩個運算元按照二進位制位批次對應位相或的,邏輯或兩個操縱數作為整體來相或的。
例1:0b1010 1010 | 0b1111 0000 = 0b1111 1010;
例2:0b1010 1010 || 0b1111 0000 = 1(只要不全為0,都為真)
注意:c語言中位取反是~,邏輯取反是!
1.按位取反是將運算元的二進位制位逐個按位取反(1變成0,0變成1);而邏輯取反是真(在c語言中只要不是0的任何數都是真)變成假(在c語言中只有0是為假,負數也為真)
#include
int main(void)
輸出結果位異或真值表:1^1 = 0, 0^0 = 0, 1^0 = 1, 0^1 = 1b = -46
c = 0
位異或特點:兩個數如果相等結果為0,不相等結果為1。
#include
int main(void)
輸出結果左運算元必須為整數型別c = 58
char和short被隱式轉換為int後進行移位操作
右運算元的範圍必須為:[0, 31]
左移運算子 << 將運算數的二進位制位左移
右移運算子 >> 把運算數的二進位制位右移
0x1 << 2+3的值會是什麼?原作者的本意究竟想表達什麼?
防錯準則
1. 避免位運算子,邏輯運算子和數**算符同時出現在乙個表示式中
2. 當位運算子,邏輯運算子和數**算符需要同時參與運算時,盡量用括號()來表達計算次序
strong text小技巧
1. 左移n位相當於乘以2的n次方,但效率比數**算符高
2. 右移n位相當於除以2的n次方,但效率比數**算符高
操作符和表示式 逗號運算子
逗號表示式是c語言中的 貼上劑 逗號表示式用於將多個子表示式連線為乙個表示式 逗號表示式的值為最後乙個子表示式的值 逗號表示式中的前n 1個子表示式可以沒有返回值 逗號表示式按照從左到右的順序計算每個子表示式的值 exp1,exp2,exp3,expn 示例 逗號表示式的示例 include voi...
位運算子 操作符
按位與 按位或 取反 按位異或 按位異或可以實現兩個變數值的交換,但是並不推薦。a b b a a b 都是雙目運算子,將二進位制向左移動指定位,高位丟棄,低位補0.當為負數時,根據編譯系統的規定補0,或者1.例 0x01 2 3 這裡要考慮運算子的優先順序。的優先順序大於 的優先順序,所以0x01...
操作符和表示式
一.操作符 1.算術操作符 除了 之外其餘的幾個操作符既可以用於計算整型也可以用於計算浮點型資料,只能計算整型資料,得到的結果是餘數 2.移位操作符 右移位操作符 左移時,值最左邊的幾位被丟棄,右邊多出來的幾個空位由0補齊。右移時,從左邊移入新位有兩種方式。一種方案是邏輯移位,左邊移入的數由0填齊 ...