異或和與操作的新理解 不用加減乘除做加法

2021-10-09 15:03:57 字數 889 閱讀 7903

寫乙個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算符號。

整數在計算機中用二進位制補碼表示,加法的本質是每乙個二進位制數字做加法,並且對每乙個二進位制數字向上一位做進製。也就是說,對於兩個二進位制數相加,等於「忽略進製的加法結果」加上「進製結果」。而「異或」操作等效於忽略進製的加法;「與」操作等效於求進製,配合左移操作形成進製

假設我們要求10+7

10+7 = 1010+0111

1010^0111 = 1101 //這是每一位忽略進製的加法

1010&0111 = 0010 //這是進製情況,左移一位得到新的加數 0100

此時,10+7 = 1010+0111 = 1101+0100

1101^0100 = 1001

1101&0100 = 0100 左移一位得到1000

此時, 10+7 = 1010+0111 = 1101+0100 = 1001 + 1000

1001^1000 = 0001

1001&1000 = 1000 左移一位得到10000

此時,10+7 = 1010+0111 = 1101+0100 = 1001 + 1000 = 0001 + 10000

0001 ^ 10000 = 10001

0001^10000 = 0000 左移一位還是0,終止計算過程

此時,10+7 = 1010+0111 = 1101+0100 = 1001 + 1000 = 0001 + 10000 = 10001 = 17

int

add(

int num1,

int num2)

return num1;

}

對與 或 非 異或 或非 與非的理解和記憶

計算機原理與結構 中文表示 英文表示 與and或or 非not 異或xor 或非nor與非n 與 即當所有輸入條件同時滿足1,輸出1 輸入條件只要有0就輸出0。或 輸入條件有1即輸出1 乙個1也沒有才輸出0。非 輸出結果與輸入條件取反。0變1,1變0。異或 兩輸入門 僅有乙個輸入條件為1時輸出為1 ...

不使用臨時變數交換兩個變數的值(異或,加減,乘除)

一般我們交換兩個變數的值的時候,一般會用到乙個輔助變數,像這樣 int temp a a b b temp 當然,也有一些指令碼語言如python,lua只需要一行 就搞定 a,b b,a除了使用輔助變數之外,我們還可以通過其他方法來達到交換的目的。異或有一些有趣的用法,比如這裡有用異或的性質求出陣...

不用加減乘除做加法與不用新的變數交換兩個變數的值

不用加減乘除做加法 第一步 不考慮進製對每一位相加,0加0的0,0加1的1,1加0的1,1加1的0,這個結果和異或的結果相同 第二步 只有1加1會進製,這個結果和與的結果相同 第三步 將兩步的結果相加,重複上面的操作,直到不產生進製 int add int num1,int num2 while n...