a b等於幾(不用 )

2021-08-13 18:07:57 字數 1577 閱讀 1789

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

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

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

當然可以

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

目錄

實驗解析

思路函式說明

結果展示附錄

運算名稱

運算符號

運算描述與&

如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0或|

兩個相應的二進位制位中只要有乙個為1,該位的結果值為1

非(取反)

~~是一元運算子,用來對乙個二進位制數按位取反,即將0變1,將1變0異或^

若參加運算的兩個二進位制位值相同則為0,否則為1

左移<<

用來將乙個數的各二進位制位全部左移n位,右補0

將乙個數的各二進位制位右移n位,移到右端的低位被捨棄,對於無符號數,高位補0

我的第一想法當然是直接return a+b;嘿嘿;然而,我上網一搜,大神是真不少。

不相同一位一位進行比較,分類討論。ab

c1(進製)

c2(結果)00

0010

0100

1111

1111

0001

0110

0100

00那麼現在:

從a取最後一位x,從b取最後一位y

迴圈這些操作,記錄每次的c2 ,就是a+b的結果

高階方法

參考資料

c語言邏輯運算子

#include 

using

namespace

std;

int calculate(int a,int b);

main()

if(b==0)

for(int i = 0;i< 32 ;i++)else

if(a1&b1|a1&c11|b1&c11)else

if(a1|b1|c11)else

c1 = c1|(c11<>1;

b = b>>1;

}return c2;

}

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

給出兩個整數a和b,求他們的和,但不能使用 等數 算符。說明a和b都是 32位 整數麼?是的我可以使用位運算子麼?當然可以 樣例如果 a 1 並且 b 2,返回3 目錄 實驗解析 函式說明 結果展示附錄 簡單方法確實想著簡單,但是做起來還是分類挺多的,我們再來 一下更簡便的方法 不相同初級解法 二進...

不用中間變數交換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 完數 乙個數的所有因子 不包括自身 相加等...

如何不用加法符號計算a b 的值?

a b的值可以等價於a b a b 1,也就是a異或b的值加上a與b的值再左移一位。a異或b的值被叫做非進製求和,a b 1是求每位的進製。舉個例子就明白為什麼是這樣了。比如計算5 4,對於二進位制而言,100 101 1001,產生了進製。那麼,100101 001,100 101 100,左移一...