簡單理解和應用程式中的位運算子

2021-07-26 16:15:40 字數 1199 閱讀 6631

位運算子在實際專案中使用的比較少,但是由於效率高,並且有助於理解程式底層,還有有理解的必要的,我之前一直都位運算子比較疑惑,做了些演算法題之後漸漸理解了。

按位與:」&」

例子: 2 (0010) & 7 (0111) => 2 (0010)

按位異或 :」^」

例子: 2 (0010) ^ 7 (0111) => 5 (0101)

按位或: 「|」

例子:2 (0010) | 7 (0111) => 7 (0111)

按位非」~」

例子: ~2(0010) => -3 (1101)

注意這裡-3是2的補餘,負數的顯示方式和正數不同,首位是1,後面是補餘。如:

1111 是 -1,

1110 是 -2, 即 ~2 + 1, ~0010 => 1101, 1101 + 1 = 1110 => 2

1101 是 -3, 即 ~3 + 1

所以如果想要獲得乙個正整數的相反數,只要使用 ~x + 1 即可;

位移: 「<<」 和 「>>」

例子: 2 (0010) << 1=> 4 (0100)

2 (0010) >> 1=> 1 (0001)

應用,使用位操作符實現程式中的加法操作:

首先我們要使用按位與「&」操作符來找到進製數,因為在二進位制當中,兩個數相加,只有同一位上都是1,才會向上進一位;

然後使用異或操作符「^」來計算兩個數相加之後當前位的值(此時不考慮進製數),因為二進位制中只有乙個是0,另乙個是1,相加後當前位才是1;

最後將進製數左移一位,加到原來已經相加的結果上,產生下乙個進製數,直到進製數等於0;

// 迭代演算法

public

intgetsum(int a, int b)

return a;

}// 迭代演算法

public

intgetsubtract(int a, int b)

return a;

}// 遞迴演算法

public

intgetsum(int a, int b)

// 遞迴演算法

public

intgetsubtract(int a, int b)

// 獲得乙個數的相反數

public

intnegate(int x)

c 位運算子的理解

問題1 10 1等於多少?問題2 10 1等於多少?儲備知識點 判斷是右位移運算,還是左位移運算?根據位運算子閉口的方向判斷,閉口在右,說明是右位移運算子 閉口在左,說明是左位移運算子 可以想象水流向閉合處流去,水流的方向就是位運算的方向 十進位制轉二進位制的方法 短除法,將被運算的值,除以2,記錄...

位運算子的一些簡單應用

在第一節概述裡就說了,c語言是一種中級語言,能對計算機硬體直接操作,這就涉及到位的概念。一 位的概念 我們知道,在計算機中,一位元組佔8位 現在的某些電腦也有佔16位的 這樣表示的數的範圍為0 255,也即00000000 11111111。位就是裡面的0和1。char c 100 實際上c應該是0...

位運算子的一些簡單應用

在第一節概述裡就說了,c語言是一種中級語言,能對計算機硬體直接操作,這就涉及到位的概念。一 位的概念 我們知道,在計算機中,一位元組佔8位 現在的某些電腦也有佔16位的 這樣表示的數的範圍為0 255,也即00000000 11111111。位就是裡面的0和1。char c 100 實際上c應該是0...