C語言基礎 位運算

2021-09-01 09:28:39 字數 2380 閱讀 7444

---------------start reading---------------

作為乙個c語言的小白,位運算的重要性還不能深深地感受,不過等到以後接觸了linux,實行大小端轉換……就要運用到很多位運算,所以,位運算是非常重要的!

位運算實際上就是二進位制的計算,下面我來介紹一下位運算的相關知識

~ 按位取反

10: 0000 1010

~10 = 1111 0101

*二進位制的負數轉正數,正數轉負數,都是先取反再加一

& 按位與

每一位按布林法則表,相同位為1則為1否則為0

10: 0000 1010

13 : 0000 1101

10&13= 0000 1000

| 按位或

相同位有乙個為1則為1

10 : 0000 1010

12 : 0000 1100

10|13= 0000 1110

^ 按位異或

相同位上不一樣為1,一樣為0

10: 0000 1010

13: 0000 1101

10^13= 0000 0111

<< 按位左移

二進位制數最高位向左移,右邊補零(相當於擴大數字的2n倍)

10 : 0000 1010

10<<1 0001 0100

10<<2 0010 1000

>>按位右移

二進位制數最低位向右移(扔尾數),左邊補符號位(正數補0,負數補1)

10: 0000 1010

-10: 1111 0110

10>>2= 0000 0010

-10>>2= 1111 1101

下面我們來看一些常見的二進位制位的操作

去掉最後一位 | (101101->10110) |

在最後加乙個0 | (101101->1011010) |

在最後加乙個1 | (101101->1011011) |

把最後一位變成1 | (101100->101101) |

把最後一位變成0 | (101101->101100) |

最後一位取反 | (101101->101100) |

把右數第k位變成1 | (101001->101101,k=3) |

把右數第k位變成0 | (101101->101001,k=3) |

右數第k位取反 | (101001->101101,k=3) |

取末三位 | (1101101->101) |

取末k位 | (1101101->1101,k=4) |

取右數第k位 | (1101101->1,k=4) |

把右邊連續的1變成0 | (100101111->100100000) |

把右起第乙個0變成1 | (100101111->100111111) |

把右邊連續的0變成1 | (11011000->11011111) |

去掉最後一位 | (101101->10110) | x >> 1

在最後加乙個0 | (101101->1011010) | x << 1

在最後加乙個1 | (101101->1011011) | (x << 1)|1

把最後一位變成1 | (101100->101101) | x | 1

把最後一位變成0 | (101101->101100) | (x | 1)-1或者

最後一位取反 | (101101->101100) | x ^ 1

把右數第k位變成1 | (101001->101101,k=3) | x | (1 << (k-1))

把右數第k位變成0 | (101101->101001,k=3) | x & ~(1 << (k-1))

右數第k位取反 | (101001->101101,k=3) | x ^ (1 << (k-1))

取末三位 | (1101101->101) | x & 7

取末k位 | (1101101->1101,k=4) | x & ((1 << k)-1)

取右數第k位 | (1101101->1,k=4) | (x >> (k-1)) & 1

把右邊連續的1變成0 | (100101111->100100000) | x & (x+1)

把右起第乙個0變成1 | (100101111->100111111) | x | (x+1)

把右邊連續的0變成1 | (11011000->11011111) | x | (x-1)

這就是一些基本的位運算的用法了,希望對大家有幫助。

-----------------end---------------------------

C語言基礎一 位運算

程式是按照從上到下的順序依次執行的。選擇結構,程式中會判斷並選擇一條符合條件的語句執行。if 條件表示式 執行的語句 else if 條件表示式 執行的語句 else 執行的語句 switch 表示式 不能為小數,因為計算機中的小數只能儲存近似值。break 是跳出這個選擇結構,若是沒有break,...

c語言位運算

c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 按位或 兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 是一元運算子,用來對乙個二進位制數按位取反,即將0變1...

C語言位運算

c語言位運算 位運算應用口訣 清零取反要用與,某位置一可用或 若要取反和交換,輕輕鬆鬆用異或 移位運算 1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。2 am p 3 amp amp amp qu ot 右 移 右邊 的位被擠 掉。對於 左邊移出 的空位,如果是正 數則空位 補0,若 ...