位運算是指按照二進位制進行的運算,在c語言中,提供了6種的位運算子,他們分別是按位與(&),按位或(|),按位異或(^),按位取反(~),左移(《)和右移(》)。這些運算子只能用整型運算元,也就是說只能用於帶符號和不帶符號的short,int,long,char型別。
1:按位與(&)
按位與是指講兩個運算元按照二進位制位進行「與」運算。兩個運算元相應的二進位制位都為1,結果為1,反之結果為0。這個按位與的運算規則其實和邏輯運算子「與」一樣,只不過是按位與是在二進位制位上進行運算。
以3和5舉例說明,3的二進位制為00000011(2),5的二進位制為00000101(2)這按位與的運算結果為00000001(2)即3&5=1。
2:按位或(|)
按位或是指講兩個運算元按照二進位制位進行「或」運算。兩個運算元相應的二進位制位只要有乙個為1,結果為1,反之結果為0。
以3和5舉例說明,3的二進位制為00000011(2),5的二進位制為00000101(2)這按位或的運算結果為00000111(2)即3|5=7
3:按位異或(^)
按位異或是指將兩個運算元按照二進位制位進行運算,兩個運算元相應的二進位制位值只要相同,運算結果為0,反之結果為1。
以3和5舉例說明,3的二進位制為00000011(2),5的二進位制為00000101(2)這按位異或的運算結果為00000110(2)即3^5=6
4:按位取反(~)
按位取反是單目運算子,只有乙個運算元,是將運算元相應的二進位制位數值取反。
以5為例,5的二進位制數為00000101(2)
按位取反結果為00000010(2)即~5=2
5:左移(《)
左移運算子是用來將乙個數的各二進位制位左移若干位,移動的位數由右運算元指定(右運算元必須是非負
以3來舉例,3的二進位制為00000011,左移結果為00000110,即《3=6
6:右移》
右移運算子是用來將乙個數的各二進位制位右移若干位,移動的位數由右運算元指定(右運算元必須是非負值),移到右端的低位被捨棄,對於無符號數,高位補0。對於有符號數,某些機器將對左邊空出的部分用符號位填補(即「算術移位」),而另一些機器則對左邊空出的部分用0填補(即「邏輯移位」)。注意:對無符號數,右移時左邊高位移入0;對於有符號的值,如果原來符號位為0(該數為正),則左邊也是移入0。如果符號位原來為1(即負數),則左邊移入0還是1,要取決於所用的計算機系統。有的系統移入0,有的系統移入1。移入0的稱為「邏輯移位」,即簡單移位;移入1的稱為「算術移位」。
c語言負數左移右移 C語言負數的移位運算
在c 中左移也就是所說的邏輯移位,右端補,而右移是算數移位,左端補齊的是最高位 的符號位。故負數左移,有可能變成正數,但負數右移,肯定還是負數。用進製的形式對資料進行賦值 這進製的數代表的是補碼。i 0xfffffff7 0xfffffff7 是補碼,而不是原碼,故 i 9 printf d x n...
c語言負數左移右移 C語言中的左移與右移
先說左移,左移就是把乙個數的所有位都向左移動若干位,在c中用 i i 2 把i裡的值左移2位也就是說,1的2進製是000.0001 這裡1前面0的個數和int的位數有關,32位機器,gcc裡有31個0 左移2位之後變成000.0100,也就是10進製的4,所以說左移1位相當於乘以2,那麼左移n位就是...
c語言負數左移右移 C語言中關於迴圈左移和迴圈右移
昨天在解答同學的問題中,又接觸了好久沒碰的c中的位操作。在重接觸的過程中,又理解了一遍計算機儲存資料的細節,於是分享給大家看一下。讓我們先看一下題目 編寫乙個程式,輸入兩個整數i j,如果j的值大於0,則將i迴圈左移j位 如果j的值小於0,則將i迴圈右移j位,最後輸出i的值。輸入輸出格式要求 輸入格...