給出兩個整數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,左移一...