在C语言中实现二进制数的输入、输出和转换,可以通过以下几种方法实现:
一、二进制输入
使用`scanf`函数
通过指定格式说明符`%b`或`%B`读取二进制数。例如:
```c
include
int main() {
unsigned int binaryNum;
printf("Enter a binary number: ");
scanf("%b", &binaryNum);
printf("You entered the binary number: %dn", binaryNum);
return 0;
}
```
注意:输入的二进制数需以`0b`或`0B`开头。
逐位输入
可以通过循环逐位读取二进制位(0或1):
```c
include
int main() {
int binaryNum = {0}; // 假设输入32位
printf("Enter 32 binary digits (0/1): ");
for (int i = 0; i < 32; i++) {
scanf("%d", &binaryNum[i]);
}
printf("Binary number: ");
for (int i = 31; i >= 0; i--) {
printf("%d", binaryNum[i]);
}
printf("n");
return 0;
}
```
二、二进制输出
使用`printf`函数
通过格式说明符`%b`输出二进制数:
```c
include
void printBinary(int num) {
for (int i = sizeof(int) * 8 - 1; i >= 0; i--) {
printf("%d", (num >> i) & 1);
}
printf("n");
}
int main() {
int num = 10;
printf("Binary form: ");
printBinary(num);
return 0;
}
```
该函数通过位操作逐位检查并输出二进制位。
格式化输出(不足位数补零)
若需固定长度输出(如8位),可补零:
```c
include
void printPaddedBinary(int num, int length) {
for (int i = length - 1; i >= 0; i--) {
printf("%d", (num >> i) & 1);
if (i != 0) printf("0");
}
printf("n");
}
int main() {
int num = 10;
int length = 8;
printf("Padded binary (8 bits): ");
printPaddedBinary(num, length);
return 0;
}
```
三、二进制转换(十进制转二进制)
使用库函数`itoa`
C标准库提供`itoa`函数将十进制转换为二进制字符串:
```c
include include int main() { int num; printf("Enter a decimal number: "); scanf("%d", &num); char binary; itoa(num, binary, 2); printf("Binary representation: %sn", binary); return 0; } ``` 注意:`itoa`在某些编译器中可能不支持,建议使用`snprintf`替代: ```c include int main() { int num; printf("Enter a decimal number: "); scanf("%d", &num); char binary; snprintf(binary, sizeof(binary), "%b", num); printf("Binary representation: %sn", binary); return 0; } ``` 位操作实现 通过位移和按位与操作手动转换: ```c void decimalToBinary(int num) { for (int i = 31; i >= 0; i--) { printf("%d", (num >> i) & 1); if (i % 8 == 0) printf(" "); // 每8位换行 } printf("n"); } int main() { int num = 10; printf("Decimal to binary: "); decimalToBinary(num); return 0; } ``` 四、二进制文件操作 C语言支持直接读写二进