學習了位運算後總想著怎麼把它用在程式中,奈何知識量有限,在這裡便寫乙個位運算實現兩數之和的功能》
首先我們得先了解位運算的三個基本操作符:
&按位與—(有0為0,雙1位1 )
i按位或—(有1為1,雙0為0)
^按位異或—(不同為1,相同為0)
接下來我們想要用位運算解決兩數之和,得先知道他們的二進位制形式。
例如:2+3=5
20010
30011
50101
不難看出第二位發生了進製,那麼我們怎麼用符號實現呢:
(2 & 3)<<1
(0010 & 0011)<<1 = 0100
2^30010 ^0011 = 0001
50100^0001 = 0101
雖然上述看似成立了,但是運算起來仍然有問題,這裡僅僅考慮到了單次進製,假設有多次進製那麼這個等式便不成立。
而很自然的想到連續進製那麼就會聯想到迴圈,下面這個**便用了迴圈實現多次進製:
#include
intmain()
printf
("%d + %d = %d\n"
, x, y, x ^ y)
;return0;
}
上述**中的while的條件很好的讓所有的進製都能進行。 位運算 實現加法
用位運算實現加法也就是計算機用二進位制進行運算,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 ...