注意按位運算子|和&與邏輯運算子||和&&完全是兩碼事,別混淆了。
結合律:a&b&c <=> (a&b)&c <=> a&(b&c)
交換律:a&b <=> b&a
左移和右移
左移運算子「<
右移運算子「>>」是雙目運算子。其功能把「>> 」左邊的運算數的各二進位全部右移若干位,「>>」右邊的數指定移動的位數。但注意:對於有符號數,當為正數時, 最高位補0 ;而為負數時,符號位為1。
0x1<<2+3的值是多少?
不是7,是32,因為+優先順序高於<
防錯準則:
1.避免位運算子,邏輯運算子和數**算符同時出現在乙個表示式中
2.當位運算子,邏輯運算子和數**算符需要同時參與運算時,盡量使用括號()來表達計算次序
0x01<<2+30;或0x01<<2-3;
這樣行嗎?不行。乙個整型數長度為32 位,左移32 位發生了什麼事情?溢位!左移-1位呢?反過來移?所以,左移和右移的位數是有講究的。左移和右移的位數不能大於資料 的長度,不能小於0 。
小技巧:
左移n位相當於乘以2的n次方,右移相當於除以2的n次方,效率比數**算符高
3種交換兩個變數程式分析
#define swap1(a,b) \
//最常規,但要借助第三個變數,如果資源裝置受限則不好,但是適用於任何型別的數
#define swap2(a,b) \
// 如果a,b較大,則a+b可能會產生溢位
#define swap3(a,b) \
//不會溢位,效率高,適用於整型
面試題有乙個數列,其中的自然數都是以偶數的形式出現,只有乙個自然數出現的次數為奇數次。編寫程式找出這個自然數。
16 位運算子分析
注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 4.4.5 一 位運算子分析 1 c語言中的位運算子 位運算子直接對bit位進行操作,其效率最高。2 左移和右移注意點 左運算元必須為整數型別 char 和 short被隱式轉換為int後...
位運算子,「,」逗號運算子,
位運算子有 按位與 按位或 按位異或 按位取反 優先順序從高到低,依次為 按位與運算有兩種典型用法,一是取乙個位串資訊的某幾位,如以下 擷取x的最低7位 x 0177。二是讓某變數保留某幾位,其餘位置0,如以下 讓x只保留最低6位 x x 077。按位或運算的典型用法是將乙個位串資訊的某幾位置為1。...
運算子之位運算子
右移 負數 無符號右移 或 異或 與 非 說明 位運算子都是作用在二進位製上的 比如 n 50 n 1 結果是多少?100 n 2 結果是多少?200 n 5 結果是多少?1600 為什麼會是這樣的呢?運算的邏輯如下 1,n 50 2,n的二進位制是 0011 0010 3,0011 0010 左移...