3分鐘了解位運算規則「位運算符左移右移怎麼運算」

位運算不管是在Java語言,還是在C語言中,或者其他語言,都是經常會用到的,所以本文也就不固定以某種語言來舉例子了,原始點就從0、1開始。位運算主要包括按位與(&)、按位或(|)、按位異或(^)、取反(~)、左移(<<)、右移(>>)這幾種,其中除了取反(~)以外,其他的都是二目運算符,即要求運算符左右兩側均有一個運算量。

1、補碼

在總結按位運算前,有必要先介紹下補碼的知識,我們知道當將一個十進制正整數轉換為二進制數的時候,只需要通過除2取余的方法即可,但是怎麼將一個十進制的負整數轉換為二進制數呢?其實,負數是以補碼的形式表示,其轉換方式,簡單的一句話就是:先按正數轉換,然後取反加1。

要將十進制的-10用二進制表示,先將10用二進制表示:

0000 0000 0000 1010

取反:

1111 1111 1111 0101

加1:

1111 1111 1111 0110

所以,-10的二進制表示就是:1111 1111 1111 0110

2、按位與(&)

參加運算的兩個數,換算為二進制(0、1)後,進行與運算。只有當相應位上的數都是1時,該位才取1,否則該為為0。

將10與-10進行按位與(&)運算:

0000 0000 0000 1010

1111 1111 1111 0110

———————–

0000 0000 0000 0010

所以:10 & -10 = 0000 0000 0000 0010

3、按位或(|)

參加運算的兩個數,換算為二進制(0、1)後,進行或運算。只要相應位上存在1,那麼該位就取1,均不為1,即為0。

將10與-10進行按位或(|)運算:

0000 0000 0000 1010

1111 1111 1111 0110

———————–

1111 1111 1111 1110

所以:10 | -10 = 1111 1111 1111 1110

4、按位異或(^)

參加運算的兩個數,換算為二進制(0、1)後,進行異或運算。只有當相應位上的數字不相同時,該為才取1,若相同,即為0。

將10與-10進行按位異或(^)運算:

0000 0000 0000 1010

1111 1111 1111 0110

———————–

1111 1111 1111 1100

所以:10 ^ -10 = 1111 1111 1111 1100

可以看出,任何數與0異或,結果都是其本身。利用異或還可以實現一個很好的交換算法,用於交換兩個數,算法如下:

a = a ^ b;

b = b ^ a;

a = a ^ b;

5、取反(~)

參加運算的兩個數,換算為二進制(0、1)後,進行取反運算。每個位上都取相反值,1變成0,0變成1。

對10進行取反(~)運算:

0000 0000 0000 1010

———————

1111 1111 1111 0101

所以:~10 = 1111 1111 1111 0101

6、左移(<<)

參加運算的兩個數,換算為二進制(0、1)後,進行左移運算,用來將一個數各二進制位全部向左移動若干位。

對10左移2位(就相當於在右邊加2個0):

0000 0000 0000 1010

——————–

0000 0000 0010 1000

所以:10 << 2 = 0000 0000 0010 1000 = 40

注意,觀察可以發現,左移一位的結果就是原值乘2,左移兩位的結果就是原值乘4。

7、右移(>>)

參加運算的兩個數,換算為二進制(0、1)後,進行右移運算,用來將一個數各二進制位全部向右移動若干位。

對10右移2位(就相當於在左邊加2個0):

0000 0000 0000 1010

——————–

0000 0000 0000 0010

所以:10 >> 2 = 0000 0000 0000 0010 = 2

注意,觀察可以發現,右移一位的結果就是原值除2,左移兩位的結果就是原值除4,注意哦,除了以後沒有小數位的,都是取整。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/281274.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-21 13:17
下一篇 2024-12-21 13:17

相關推薦

發表回復

登錄後才能評論