C語言學習 位運算

2021-10-03 11:30:51 字數 1733 閱讀 6468

原碼 就是前面所介紹的二進位制定點表示法,即最高位為符號位,「 0 」表示正,「 1 」表示負,其餘位表示數值的大小。

反碼 表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

補碼 表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加 1 。

補碼是為了表示乙個負數的二進位制形式。

其轉化方式是,先將負數當成正數,轉化成二進位制的形式,再將二進位制正數的各個位上取反,再加上一。

例如-5

先求出5的二進位制數 : 0000 0000 0101

然後將各個位上0變1,1變0 : 1111 1111 1010

最後再加1 : 1111 1111 1011

運算的兩個數,轉換算為二進位制後,進行與(&)運算。

當相應位上的數都是1時,該位取1,否則該為0。

例如5 & -5

5 : 0000 0000 0101

-5 :1111 1111 1011

答案 : 0000 0000 0001

運算的兩個數,轉換為二進位制後,進行或(|)運算。

只要相應位上存在1,那麼該位就取1,如果都不為1,就為0。

還是5 | -5

0000 0000 0101

1111 1111 1011

可以看到每一位中其中乙個都有1

答案 :1111 1111 1111

運算的兩個數,轉換成二進位制數後,進行異或(^)運算

如果相應位置上的數相同,該位取0,如果不同改位取1。

5 ^ -5

0000 0000 0101

1111 1111 1011

答案: 1111 1111 1110

同時任何數異或0都是其本身,乙個數如果異或自己則等於0

這樣我們可以用異或來交換兩個數的值

比如交換x,y的值

x ^= y; x = x ^ y

y ^= x; y = y ^ x ^ y

x ^= y; x = ( x ^ y ) ^ (y ^ x ^ y) ; --------- //最後一步 x ^= y 時 x = x ^ y; y = y ^ x ^ y

將乙個數二進位制下的數向左移若干位,

比如 x << y 就是將二進位制下的x 向左移 y 位

例 : 5 << 5

5 : 0000 0000 0101

5 << 5 : 0000 1010 0000

在10進製下就等於160

我們可以思考一下,在十進位制中,乙個數每乘一次10就向左進一位。

那麼在二進位制中,同10進製一樣,二進位制中每乘一次2就向左進一位,

那麼乙個數左移x 就等價於乙個數乘 2x。

將乙個數在二進位制下右移若干位

與左移用法相同

例 5 >> 2

5:0000 0000 0101

5 >> 2 : 0000 0000 0001

十進位制下等於1

這裡與左移類似,十進位制下每除10整數字就退一位

那麼右移就等價於除了幾次2

同時右移運算是向下取整的

其實在說補碼的時候,取反就已經說了,就是將取反的數在二進位制下的每一位取相反的數

5 : 0000 0000 0101

~5 : 1111 1111 1010

c語言位運算 C語言學習筆記(二)位運算

這一節主要說的是位運算,計算機中的執行速度 位運算 加減 乘除 求餘 位運算就是將數字轉換成二進位制後進行運算,之後再將數字轉換成原來的進製 與運算 當兩個數相與時,只有都為l的時候結果才為1,其餘情況結果都為0,符號 include int main 這個程式可以判斷a是偶數還是奇數,輸出為1說明...

C語言學習筆記 進製和位運算

第一部分 進製 一 基本概念 進製就是不同的計數方式,預設情況下寫的數字都是十進位制的。1 二進位制 逢2進製,0b或0b開頭 int number2 0b1100 2 十進位制 逢10進製 int number 12 3 八進位制 逢8進製,0開頭 int number3 014 4 十六進製制 ...

C語言學習筆記之位運算求餘

我們都知道,求乙個數被另乙個數整除的餘數,可以用求餘運算子 但是,如果不允許使用求餘運算子,又該怎麼辦呢?下面介紹一種方法,是通過位運算來求餘,但是注意 該方法只對除數是2的n次方冪時才有效。在移位運算中我們可知,計算機中的資料都是0和1的序列,當我們把某個數字左移一位,該數字會擴大為原來的2倍 而...