在C语言中,二进制数的处理主要通过位运算和类型转换实现。以下是具体方法及示例:
一、二进制数的表示与输入
可以使用`0x`前缀直接表示二进制数,例如:
```c
int binary = 0xA; // 十六进制1010对应的十进制数
printf("%dn", binary); // 输出10
```
字符常量表示
C语言中用`0b`前缀表示二进制常量,例如:
```c
int binary = 0b1010; // 二进制1010对应的十进制数
printf("%dn", binary); // 输出10
```
用户输入
通过`scanf`函数读取用户输入的十进制数,需指定格式说明符(如`%d`)。
二、二进制运算
基本运算符
- 按位与(&): 对应位都为1时结果为1,否则为0。例如: ```c int a = 5(0101), b = 3(0011); printf("%dn", a & b); // 输出1(0001) ``` - 按位或(|)
```c
printf("%dn", a | b); // 输出7(0111)
```
- 按位异或(^):对应位不同则结果为1,相同为0。例如:
```c
printf("%dn", a ^ b); // 输出6(0110)
```
- 左移(<<):将二进制位左移n位,相当于乘以2^n。例如:
```c
printf("%dn", (a << 2)); // 输出20(101000)
```
- 右移(>>):将二进制位右移n位,相当于除以2^n(符号位保持不变)。例如:
```c
printf("%dn", a >> 1); // 输出2(0010)
```
- 取反(~):将所有位取反(0变1,1变0)。例如:
```c
printf("%dn", ~a); // 输出-6(-0101)
```
例如,计算`(a & b) | (c ^ d)`:
```c
int c = 4(0100), d = 2(0010);
printf("%dn", (a & b) | (c ^ d)); // 输出6(0110)
```
三、二进制输出
手动实现
通过循环取余和位移操作,将十进制数转换为二进制字符串。例如:
```c
void printBinary(int num) {
if (num == 0) return;
char binary = "";
for (int i = 31; i >= 0; i--) {
binary[i] = (num & 1) + '0';
num >>= 1;
}
printf("%sn", binary);
}
int main() {
int num = 29;
printf("Binary of %d is: ", num);
printBinary(num); // 输出11101
return 0;
}
```
使用内置函数
C语言标准库提供`printf`格式化输出,直接使用`%b`可输出二进制(部分编译器支持):
```c
printf("%bn", 29); // 输出11101
```
*注意:`%b`输出的二进制可能包含前导零,且不支持负数。*
四、注意事项
数据类型限制: `int`类型通常为32位,无符号类型(如`unsigned int`)可表示更大范围的二进制数。 负数处理