2.列印整數二進位制的奇數字和偶數字
3.統計二進位制中1的個數
4 交換兩個變數(不建立臨時變數)
5.喝汽水問題
程式設計實現:兩個int(32位)整數m和n的二進位制表達中,有多少個位(bit)不同?
輸入例子:
1999 2299
輸出例子:7
(1) 先將m和n進行按位異或,此時m和n相同的二進位制位元位清零,不同的二進位制位元位為1
(2) 統計異或完成後結果的二進位制位元位中有多少個1即可
這裡統計乙個數中1的個數的方法兩種
第一種很容易想到,將數迴圈右移1位直到數為零,每次與1相與,結果為真表示該位為1。但是這種方法需要注意使用無符號型別,不然左邊空位會補符號位1
用unsigned型別是為了保證數在右移時,無論該程式在什麼機器上執行,左邊空出的位都用0而不是符號位填補。
第二種方法比較巧妙利用x&=(x-1)這個式子每次消除x中最右邊值為1的二進位制位,迴圈次數即為1的個數。
我們隨便為x-1選乙個值,比如二進位制1010,x就為1011,x&=(x-1),x為1010
x-1為1001,x&=(x-1),x為1000,
x-1為0111,x&=(x-1),x為0,
迴圈三次,1011中共3個1,
我們發現x-1最右端為0的位與x最右端為1的位相對應,
兩者相與,x&(x-1)就能消除x最右端值為1的位。
//1.求兩個數二進位制中不同位的個數
intcalc_dif_bit
(int m,
int n)
// tmp >>= 1;
// //}
//方法2
int tmp = m^n;
int count =0;
while
(tmp)
return count;
}int
main()
system
("pause");
return0;
}
獲取乙個整數二進位制序列中所有的偶數字和奇數字,分別列印出二進位制序列
(1)提取所有的奇數字,如果該位是1,輸出1,是0則輸出0
(2) 以同樣的方式提取偶數字置
檢測num中某一位是0還是1的方式:
(1) 將num向右移動i位
(2)將移完位之後的結果與1按位與,如果:
結果是0,則第i個位元位是0
結果是非0,則第i個位元位是1
//2.列印整數二進位制的奇數字和偶數字
void
printbit
(int num)
printf
("\n");
printf
("偶數字: ");
for(
int i =
30; i >=
0; i-=2
)printf
("\n");
}int
main()
寫乙個函式返回引數二進位制中 1 的個數。
比如: 15 0000 1111 4 個 1
牛客網oj鏈結
該題思路可以參考第一題的思路,兩種方法:按位與1(注意符號)或者按位與它本身-1。
採用相鄰的兩個資料進行按位與運算
舉例:9999:10 0111 0000 1111
第一次迴圈:n=9999 n=n&(n-1)=9999&9998= 9998
第二次迴圈:n=9998 n=n&(n-1)=9998&9997= 9996
第三次迴圈:n=9996 n=n&(n-1)=9996&9995= 9992
第四次迴圈:n=9992 n=n&(n-1)=9992&9991= 9984
第五次迴圈:n=9984 n=n&(n-1)=9984&9983= 9728
第六次迴圈:n=9728 n=n&(n-1)=9728&9727= 9216
第七次迴圈:n=9216 n=n&(n-1)=9216&9215= 8192
第八次迴圈:n=8192 n=n&(n-1)=8192&8191= 0
可以觀察下:此種方式,資料的二進位制位元位中有幾個1,迴圈就迴圈幾次,而且中間採用了位運算,處理起來比較高效
//3.統計二進位制中1的個數
intcalcbit
(int num)
tmp >>=1;
}方法2
//int count = 0;
//while (num)
//return count;
}int
main()
system
("pause");
return0;
}
不允許建立臨時變數,交換兩個整數的內容
使用異或操作,異或操作滿足結合律
a=a^b
b=a^b 即:b=a ^ b ^ b =a
a=a^b 即:a=a ^ b ^ b =a
int
main()
喝汽水,1瓶汽水1元,2個空瓶可以換一瓶汽水,給20元,可以多少汽水(程式設計實現)。
(1)20元首先可以喝20瓶,此時手中有20個空瓶子
(2)兩個空瓶子可以喝一瓶,喝完之後,空瓶子剩餘:empty/2(兩個空瓶子換的喝完後產生的瓶子) + empty%2(不夠換的瓶子)
(3) 如果瓶子個數超過1個,可以繼續換,即重複2
int
main()
printf
("%d\n"
, total)
;return0;
}
c語言練習題1
1 編寫乙個程式實現求圓形的面積,使用者自己輸入半徑?s pi r r include define pi 3.14 int main int argc,const char argv 2 編寫乙個遞迴函式,求乙個整數的2進製形式。include void calc int n int main i...
C語言基礎習題練習1
1 輸入乙個三位正整數n,輸出其個位 十位和百位上的數字。程式 如下 include main 2 從鍵盤上輸入乙個小寫字母,在螢幕上輸出其對應的大寫字母。程式 如下 include main ch ch 32 printf 對應的大寫字母為 c ch 3 編寫乙個程式,從鍵盤輸入圓錐體的半徑r和高...
C語言練習題1
1 隨機函式 產生四個0 9之間的數字,不是產生乙個四位數 a.srand unsigned time null 以當前時間為準,設定隨機種子 注意 此函式,在每次開始遊戲後呼叫一次即可 b.rand 注意 rand 函式,每呼叫一次,產生乙個隨機數字以上所需標頭檔案 include srand r...