題目
獲取一個整數二進制序列中所有的偶數位和奇數位,分別列印出二進制序列
思路分析
列印一個整數的二進制位中的偶數位和奇數位,可以對整數進行移位操作,再將移位的二進制位與1進行&操作,二進制的序列在計算機的存盤中有32位,故在不考慮負數的符號位的情況下,奇數位和偶數位分別有16個,對奇數和偶數分別進行討論~~
代碼實作
1.方法一 右移運算子實作
右移運算子,最高位是補符號位,但是此題不影響,因為回圈里,每次都是判斷的最低的那一位,在有些題中,右移運算子 一定要小心使用~一不小心就會出問題
int main() {
int num = 0;
printf("請輸入一個數:");
scanf("%d", &num);
printf("奇數位:");
for (int i = 31; i >= 1; i -= 2) {
printf("%d ", (num >> i) & 1);
}
printf("\n");
printf("偶數位:");
for (int i = 30; i >= 0; i -= 2) {
printf("%d ", (num >> i) & 1);
}
printf("\n");
system("pause");
return 0;
}
直接上圖叭,就更清晰直觀一些~~
偶數位和奇數位一樣,就是回圈變數 i 的變化不同,參考奇數位的解釋即可~


2.方法二 左移運算子實作
int main() {
int num = 0;
printf("請輸入一個數:");
scanf("%d", &num);
printf("奇數位:");
for (int i = 31; i >= 1; i -= 2) {
if (num & (1 << i)) {
printf("%d ",1);
}
else {
printf("%d ", 0);
}
}
printf("\n");
printf("偶數位:");
for (int i = 30; i >= 0; i -= 2) {
if (num & (1 << i)) {
printf("%d ", 1);
}
else {
printf("%d ", 0);
}
}
printf("\n");
system("pause");
return 0;
}

其實道理和右移運算子 方法都一樣~ 只要理解左移運算子、右移運算子、按位與的原理就可以啦~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/281639.html
標籤:其他
