a b等於幾(不用 )高階解法

2021-08-13 18:56:13 字數 1476 閱讀 3667

給出兩個整數a和b, 求他們的和, 但不能使用 + 等數**算符。

說明a和b都是 32位 整數麼?

是的我可以使用位運算子麼?

當然可以

樣例如果 a=1 並且 b=2,返回3

目錄

實驗解析

函式說明

結果展示附錄

簡單方法確實想著簡單,但是做起來還是分類挺多的,我們再來**一下更簡便的方法

不相同

初級解法

二進位制四種情況運算結果對比:ab

與異或進製加法00

00001

00101

0101

01111

010大家有沒有看出些什麼?與運算表示進製,異或運算表示原位

那麼現在不用再一位一位運算了,可以整體與向右移位後加上異或結果,這裡可以運用遞迴。

int calculate(int a,int b)

if(b==0)

sum = a^b;

carry = a&b;

carry = carry<<1; //左移

參考資料

#include 

using

namespace

std;

int calculate(int a,int b);

main()

if(b==0)

sum = a^b;

carry = a&b;

carry = carry<<1;

return calculate(sum,carry);

}

#include 

using

namespace

std;

int calculate(int a,int b);

main()

if(b==0)

sum = a^b;

carry = a&b;

carry = carry<<1;

a = sum;

b = carry;}}

a b等於幾(不用 )

給出兩個整數a和b,求他們的和,但不能使用 等數 算符。說明a和b都是 32位 整數麼?是的我可以使用位運算子麼?當然可以 樣例如果 a 1 並且 b 2,返回3 目錄 實驗解析 思路函式說明 結果展示附錄 運算名稱 運算符號 運算描述與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0...

Redis之ab工具模擬高併發

個人練習 cenos7需手動安裝工具ab 模擬併發後,需要解決超賣和庫存遺留 lua解決 問題 超時問題 加上連線池 超賣 加事務解決 庫存遺留lua指令碼解決,每個使用者都會把過程執行一遍,而不會和事務裡一樣乙個成功別的全都不執行了。1 cd run media root centos 7 x86...

不用中間變數交換a b的值及完數

一 不用中間變數交換a b值。分析 a a b 將a b的和賦值給a b a b a的值已經發生變化,並且儲存了和值,因此這裡要只能對b進行求值,不能改變a的值。a a b 同理求得a值。另一種解法 a a b b a b a a b 異域 a b a b 完數 乙個數的所有因子 不包括自身 相加等...