在C语言中设置或处理二进制数据可以通过多种方式实现,以下是主要方法及示例:
一、定义二进制数
十六进制表示
可以使用`0b`或`0B`前缀直接定义二进制数(C99及以上标准支持)。
```c
include
int main() {
int binary = 0b1010; // 十六进制1010对应的二进制数
printf("%dn", binary);
return 0;
}
```
位运算表示
使用左移运算符`<<`和按位或运算符`|`组合实现二进制数的构建。
```c
include
int main() {
int binary = (1 << 3) | (1 << 1); // 1010
printf("%dn", binary);
return 0;
}
```
二、输入二进制数
使用`scanf`函数时,需在格式字符串中指定`%b`或`%B`(C99及以上标准)。
```c
include
int main() {
unsigned int binaryNum;
printf("Enter a binary number: ");
scanf("%b", &binaryNum);
printf("Binary: %bn", binaryNum);
return 0;
}
```
三、输出二进制数
手动实现(除2取余法)
通过循环将十进制数转换为二进制字符串。
```c
include
void decimalToBinary(int num) {
if (num == 0) {
printf("0");
return;
}
char binary = "";
while (num > 0) {
binary[32 - i] = num % 2 + '0';
num /= 2;
}
printf("%sn", binary);
}
int main() {
int number;
printf("Enter a decimal number: ");
scanf("%d", &number);
decimalToBinary(number);
return 0;
}
```
使用`itoa`函数
标准库函数`itoa`可将十进制数转换为二进制字符串(需包含`stdlib.h`)。
```c
include include int main() { int i; char binary; printf("Enter a decimal number: "); scanf("%d", &i); itoa(i, binary, 2); printf("Binary: %sn", binary); return 0; } ``` 四、位域(Bit Field) 通过结构体成员指定位数,实现固定长度的二进制存储。 ```c include struct BitData { unsigned int flag1 : 1; // 1位 unsigned int flag2 : 1; // 1位 unsigned int flag3 : 1; // 1位 unsigned int flag4 : 5; // 5位 }; int main() { BitData bits; bits.flag1 = 1; bits.flag2 = 0; bits.flag3 = 1; bits.flag4 = 15; printf("Flag1: %un", bits.flag1); printf("Flag2: %un", bits.flag2); printf("Flag3: %un", bits.flag3); printf("Flag4: %un", bits.flag4); return 0; } ``` 五、二进制文件操作 使用`fwrite`和`fread`函数进行二进制文件读写(需包含`stdio.h`)。 ```c include int main() { FILE *outFile = fopen("data.bin", "wb"); FILE *inFile = fopen("data.bin", "rb");
if (!outFile || !inFile) {
perror("File opening failed");
return 1;
}
int number = 42;
float score = 95.5f;
char name[] = "张三";
fwrite(&number, sizeof(number), 1, outFile);
fwrite(&score, sizeof(score), 1, outFile);
fwrite(name, sizeof(name), 1, outFile);
fclose(outFile