題目要求
- 函數原型:
void decimalToBinary(int num)
- 輸入範圍:1~1023 的自然數,超出則輸出提示並返回。
- 輸出格式:16 位二進制,每 4 位一空格(如
0000 0000 0001 1011)。
參考實現
#include <stdio.h>
#include <math.h>
#define BINARY_LEN 16
void decimalToBinary(int num) {
if (num < 1 || num > 1023) {
printf("不是正確的自然數\n");
return;
}
for (int i = BINARY_LEN - 1; i >= 0; --i) {
if ((i + 1) % 4 == 0 && i != 15) printf(" ");
printf("%d", (num & (int)pow(2, i)) >> i);
}
printf("\n");
}
int main() {
int input;
while (1) {
printf("請輸入1~1023的自然數,輸入-1退出: ");
scanf("%d", &input);
if (input == -1) break;
decimalToBinary(input);
}
return 0;
}
關鍵點解析
- 位運算提取位值:
(num & (1 << i)) >> i 獲取第 i 位(0 或 1)。
- 分組空格:當
(i+1) % 4 == 0 且非最高位時輸出空格。
- 邊界檢查:超出範圍直接返回,主循環以 -1 為哨兵退出。
擴展建議
- 使用移位
1 << i 替代 pow(2,i) 提升效率。
- 輸入非整數時需清理緩衝區防止死循環。