在C语言中,二进制计算主要通过位运算符和移位运算符实现,具体方法如下:
一、位运算符
按位与(&) 两个操作数对应位均为1时结果为1,否则为0。例如:
$$
0b1010 & 0b0011 = 0b0010 quad text{(十进制2)}
$$
按位或(|)
两个操作数对应位至少有一个为1时结果为1,否则为0。例如:
$$
0b1010 mid 0b0011 = 0b1011 quad text{(十进制13)}
$$
按位异或(^)
两个操作数对应位相同为0,不同为1。例如:
$$
0b1010 oplus 0b0011 = 0b1001 quad text{(十进制9)}
$$
取反(~)
将所有位取反(0变1,1变0)。例如:
$$
~0b1010 = 0b0101 quad text{(十进制5)}
$$
左移(<<)
将所有位向左移动指定位数,右边补0。例如:
$$
0b1010 << 2 = 0b101000 quad text{(十进制40)}
$$
右移(>>)
将所有位向右移动指定位数,有符号数采用算术右移(符号位保持),无符号数采用逻辑右移(补0)。例如:
$$
0b1010 >> 2 = 0b0010 quad text{(十进制2)}
$$
二、移位运算符
左移(<<): 如 `a << n` 将 `a` 的二进制位向左移动 `n` 位。- 右移(>>)
计算二进制数和:
$$
text{sum} = 0b1010 + 0b0011 = 0b101000 quad text{(十进制40)}
$$
通过位运算符逐位相加,效率高于传统算术运算。 四、扩展技巧
位掩码:通过组合位运算符实现特定位操作,如提取第 `i` 位:`num & (1 << i)`。- 位字段:在结构体中定义特定位宽的整数类型,如 `unsigned int a:4` 表示4位无符号整数。以上方法适用于整数类型,且需注意有符号数右移的符号位处理差异。