位運算 與 異或 移位

2021-10-13 06:07:10 字數 824 閱讀 8212

刷leetcode的時候,一直會遇到不用加法乘法去實現2個數的加法乘法運算,這類題目基本上就是利用位運算沒跑了,現在總結一下,

題目:劍指offer65. 不用加減乘除法做加法

分析:設a=7,b=5;即a=111,b=101,引入無進製和進製的概率 

無進製和進製0

0000

1101

0101

101可以看出無進製和等於二者的異或運算結果,進製等於二者的與運算結果,考慮到進製是在高位,可以將其左移一位

這樣a+b = a^b + (a&b)<<1 【這樣看可能不太明顯,大家可以用筆寫一遍,用二進位制計算2個數的加法】

因為上式中還包含了「+」,我們可以將其轉換成迴圈或者遞迴的方式,終止狀態是進製為0,即a&b<<1==0

#include#include#include#include #include #include #include using namespace std;

class solution

return a;

}};int main()

{ solution obj;

cout設a=103,b=97,則進製是010,無進製和190,區別於二進位制,這裡需要對進製乘10,即:

a+b = 190 + 1*(10^1),所以對於任意2個數,二者和都可以看做進製+無進製和。

設a=13,b=7,a=0x1101,b=0x0111,則無借位差是1010,借位是0100,區別於加法,這裡需要對借位進行減法,即:

a+b =  0x1010 - 0x0100 = 10 - 4 = 6;

移位 位與 或 異或 非

j a位運算子有 左移 右移 無符號右移 位與 位或 位非 位異或 除了位非 是一元操作符外,其它的都是二元操作符。原碼 乙個整數,按照絕對值大小轉換成的二進位制數,稱為原碼。00000000 00000000 00000000 00000101 是5的原碼反碼 將二進位制數按位取反,所得的新二進位...

按位與 或 異或運算

一 按位與 1 概念 參加運算的兩個物件,按二進位制位進行 與 運算,負數按補碼形式參加按位與運算。2 運算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩位同時為 1 結果才為 1 否則為0 有0則0 例如 3 5 1,即 0000 0011 0000 0101 0000 0001 3...

按位與 或 異或運算

一 按位與 1 概念 參加運算的兩個物件,按二進位制位進行 與 運算,負數按補碼形式參加按位與運算。2 運算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩位同時為 1 結果才為 1 否則為0 有0則0 例如 3 5 1,即0000 0011 0000 0101 0000 0001 3 ...