邏輯運算子使用分析
&&和||
1、程式中的短路
短路規則
||從左向右開始計算當遇到為真的條件時停止計算整個表示式為真所有條件為假時表示式才為假。
&&從左向右開始計算當遇到為假的條件時停止計算整個表示式為假所有條件為真時表示式才為真
2、三目運演算法
a
返回的是變數的值而不是變數c++在這裡進行了改進返回的是這個的引用。
*(a
五位運算
C語言號稱高階語言為什麼支援位運算
在嵌入式開發中會經常與外部連結串列埠和並口很需要位運算的
1、按位與2&3010&011=010
2、按位或2|3010|011=011
3、按位異或2^3010^011=011
有結合律和交換律
4、左移和右移注意點
左移運算子<
規則高位丟棄低位補0
5、右移運算子>>把運算數的二進位制位右移
規則高位補符號位地位丟棄
6、防錯準則
避免位運算子邏輯運算子和數學運算子同時出現在一個表示式中
當位運算子邏輯運算子和數學運算子需要同時參與運算時儘量使用括號()來表達計算次
序
位移的大小不能大於輸的長度且不能為負的
7、Tips
左移n位相當於乘以2的n次方但效率比數學運算子高
右移n位相當於除以2的n次方但效率比數學運算子高
8、交換變數的三種方式
#defineSWAP1(a,b)\
{\
inttemp=a;\
a=b;\
b=temp;\
}
#defineSWAP2(a,b)\
a=a+b;\
b=a-b;\
a=a-b;\
}//比第一種少用了一個變數,當a和b很大的時候會溢位
#defineSWAP3(a,b)\
a=a^b;\
b=a^b;\
}//效率最高但只適合整形(a^a)^b=b
試題有一個數列其中的自然數都是以偶數的形式出現只有一個自然數出現的次數為奇數次。編寫程式找出這個自然數。
方法一將數列排序排序後去讀取一旦奇數個就跳出
方法二用空間換時間先找到最大的數n然後申請n個空間,把陣列清零
然後用迴圈for(...)b[a[i]]++;最後遍歷陣列的大小一但是奇數就返回。
方法三用按位異或不斷的消除最後只剩下一個就是要的答案
#include
Intmain()
{
Inta={1,1,1,2,3,4,5,6,5,6,4,3,2};
邏輯運算子使用分析
&&和||
1、程式中的短路
短路規則
||從左向右開始計算當遇到為真的條件時停止計算整個表示式為真所有條件為假時表示式才為假。
&&從左向右開始計算當遇到為假的條件時停止計算整個表示式為假所有條件為真時表示式才為真
2、三目運演算法
a
返回的是變數的值而不是變數c++在這裡進行了改進返回的是這個的引用。
*(a
五位運算
C語言號稱高階語言為什麼支援位運算
在嵌入式開發中會經常與外部連結串列埠和並口很需要位運算的
1、按位與2&3010&011=010
2、按位或2|3010|011=011
3、按位異或2^3010^011=011
有結合律和交換律
4、左移和右移注意點
左移運算子<
規則高位丟棄低位補0
5、右移運算子>>把運算數的二進位制位右移
規則高位補符號位地位丟棄
6、防錯準則
避免位運算子邏輯運算子和數學運算子同時出現在一個表示式中
當位運算子邏輯運算子和數學運算子需要同時參與運算時儘量使用括號()來表達計算次
序
位移的大小不能大於輸的長度且不能為負的
7、Tips
左移n位相當於乘以2的n次方但效率比數學運算子高
右移n位相當於除以2的n次方但效率比數學運算子高
8、交換變數的三種方式
#defineSWAP1(a,b)\
{\
inttemp=a;\
a=b;\
b=temp;\
}
#defineSWAP2(a,b)\
{\
a=a+b;\
b=a-b;\
a=a-b;\
}//比第一種少用了一個變數,當a和b很大的時候會溢位
#defineSWAP3(a,b)\
{\
a=a^b;\
b=a^b;\
a=a^b;\
}//效率最高但只適合整形(a^a)^b=b
試題有一個數列其中的自然數都是以偶數的形式出現只有一個自然數出現的次數為奇數次。編寫程式找出這個自然數。
方法一將數列排序排序後去讀取一旦奇數個就跳出
方法二用空間換時間先找到最大的數n然後申請n個空間,把陣列清零
然後用迴圈for(...)b[a[i]]++;最後遍歷陣列的大小一但是奇數就返回。
方法三用按位異或不斷的消除最後只剩下一個就是要的答案
#include
Intmain()
{
Inta={1,1,1,2,3,4,5,6,5,6,4,3,2};