在C语言中,二进制运算主要通过位运算符实现,以下是核心操作及示例:
一、位运算符
按位与(&) 两个操作数的对应位都为1时结果为1,否则为0。 示例:`int a = 5 (0101); int b = 3 (0011); int c = a & b; // 结果为1 (0001)` 。
按位或(|)
两个操作数的对应位只要有一个为1,结果为1。 示例:`int a = 5 (0101); int b = 3 (0011); int c = a | b; // 结果为7 (0111)` 。
按位异或(^)
两个操作数的对应位不同则结果为1,相同为0。 示例:`int a = 5 (0101); int b = 3 (0011); int c = a ^ b; // 结果为6 (0110)` 。
左移(<<)
将操作数的所有位向左移动指定位数,右边补0。 示例:`int a = 5 (0101); int b = 2; int c = a << b; // 结果为20 (10100)` 。
右移(>>)
将操作数的所有位向右移动指定位数,有符号数采用算术右移(符号位不变),无符号数采用逻辑右移(补0)。 示例:`int a = -5 (-0101); int b = 2; int c = a >> b; // 结果为-3 (-0011)` 。
二、二进制转换技巧
十进制转二进制
- 位操作法: 通过循环取余和右移实现,例如: ```c void printBinary(int num) { for (int i = 31; i >= 0; i--) { printf("%d", num & (1 << i)); } } ``` - 递归法
```c
void printBinaryRecursive(int num) {
if (num > 0) {
printBinaryRecursive(num / 2);
printf("%d", num % 2);
}
}
```
二进制转十进制
通过按位或运算逐位计算,例如:
```c
int binaryToDecimal(char *bin) {
int result = 0;
int len = strlen(bin);
for (int i = 0; i < len; i++) {
result = result << 1 | (bin[i] - '0');
}
return result;
}
```
三、注意事项
位运算符优先级高于算术运算符,需注意括号使用。- 有符号数右移时需注意符号位处理,避免逻辑错误。- 可通过位掩码实现特定位操作,例如提取或设置某一位。