題目:檢視兩個int(32位)數的二進位制有幾位不同。
分析:要理解該題目的意思,就要明白c語言中關於位的一些操作符。
1)「&",按位與操作符,從低位到高位對兩個數的每位進行與操作,如1001&1101=1001,都為1則取1;
2)"|",按位或操作符,有乙個是1就取1;
3)"^",異或,不同則取1;
4)"~",非操作符,用來對乙個二進位制數按位取反;
5)"<<",左移操作符,右邊補0;注意1<<2是將1左移2位
6)">>",右移操作符,對於無符號數,左邊補0
知道了這麼多先驗知識,就可以美美的操作這個題,首先用乙個異或,可以得到兩數的不同,i的作用是每次向左移,檢視該位置是否是1,k是計數,根本就不用轉換成二進位制,很好理解!
#includevoid checkdifference(int a,int b)
{ int k=0,i;
for(i=0;i<32;i++)
{ if((a^b)&(1<
交換兩個int變數的方式(二進位制)
個人筆記 通常我們交換兩個變數都會用乙個中間值來儲存然後交換,用int來舉例 int a 1,b 2 int temp 中間值 temp a,a b,b temp 這樣就很簡單,我們也可以用差值法 int a 1,b 2 a a b b a b a a b 是不是感覺很有意思?其實這兩種還是很容易就...
計算兩個整數的二進位制中有幾個二進位制不同
演算法思想 這裡用到位運算,給定兩個初值 1 定義乙個計數器count在後面用來計算不同的二進位制的個數 2 定義乙個變數i,i從0開始,迴圈32次,因為32位二進位制,採用乙個for迴圈 3 a和b的二進位制形式每次右移一次,右移出的那個二進位制與1相與,如果結果相同則說明兩個二進位制相同,反之相...
有符號二進位制數的乘法
最近在閱讀 深入理解計算機系統 講到補碼乘法,書上給了乙個例子是三位無符號和補碼的乘法表。其中兩個負數的例子 3位二進位制乘法結果一般需要6為二進位制表達 帶符號數 x 101 3 和y 011 3相乘 結果為110111 9 如果直接算出來十進位制是 9然後轉換為6為二進位制我也能理解,但是我很好...