用位運算實現加法和減法
位運算異或可以實現沒有進製的加法,比如3+4.他們的二進位制分別為
00000000 00000000 00000000 000000113^4的結果為00000000 00000000 00000000 00000100
00000000 00000000 00000000 00000111轉換為2進製為7.但是,要想實現有進製的加法就需實現進製。例如7和9的二進位制分別為
00000000 00000000 00000000 000001117^9的二進位制為00000000 00000000 00000000 00001001
00000000 00000000 00000000 000011107&9<<1的結果為
00000000 00000000 00000000 00000010結果不為0,存在進製。把7^9的值存入a, (7&9)<<1的值存入b。a^b的結果為
00000000 00000000 00000000 00001100(a&b)<<1的結果為
00000000 00000000 00000000 00000100把a^b的值存入a,把(a&b)<<1的值存入b。a^b的結果為
00000000 00000000 00000000 00001000(a&b)<<1的結果為
00000000 00000000 00000000 00001000把a^b的值存入a,把(a&b)<<1的值存入b。a^b的結果為
00000000 00000000 00000000 00000000(a&b)<<1的結果為
00000000 00000000 00000000 00010000把a^b的值存入a,把(a&b)<<1的值存入b。a^b的結果為
00000000 00000000 00000000 00010000(a&b)<<1的結果為
00000000 00000000 00000000 00000000把a^b的值存入a,把(a&b)<<1的值存入b。b的值為0,進製結束,把a轉換為二進位制為16,結果正確。
實現**
#include
#include
int add(int a, int b)
while (carry);
return a;
}int main()
要實現位運算減法,只需要把加法轉化為減法,比如a+b可以轉換為a+(-b)同時可以轉換為,a+(~b+1)。比如-3的二進位制為
10000000 00000000 00000000 00000011-3的補碼為
11111111 11111111 11111111 111111013的二進位制為
00000000 00000000 00000000 00000011~3+1的二進位制為
11111111 11111111 11111111 11111101~3+1的二進位制和-3的補碼相同,說明他們相等。所以只需呼叫剛剛寫好的加法程式,便可完成減法操作,**如下
#include
#include
int add(int a, int b)
while (carry);
return a;
}int subtract(int a, int b)
int main()
位運算 實現加法
用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下 1 1 01 0 1 0 1 10 0 0很明顯這幾個表示式可以用位運算的 來代替,如下 1 1 01 0 1 0 1 10 0 0這樣我們就完成了簡單的一位數...
位運算 實現加法
用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下1 1 01 0 1 0 1 10 0 0 很明顯這幾個表示式可以用位運算的 來代替,如下1 1 01 0 1 0 1 10 0 0這樣我們就完成了簡單的一位數加...
位運算實現加法
用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下 1.1 1 0 2.1 0 1 3.0 1 1 4.0 0 0 很明顯這幾個表示式可以用位運算的 來代替,如下 1.1 1 0 2.1 0 1 3.0 1 1 ...