15.6 总结

因为二进制的1和0可以用于表示计算机内存和寄存器中位的打开和关闭状态,所以计算机硬件与二进制数字系统紧密相连。虽然C不允许以二进制形式书写数字,但是C识别与二进制相关的八进制和十六进制符号。正如每个二进制数字表示1位一样,每个八进制数字表示3位,每个十六进制数字表示4位。这种关系使二进制数字转化为八进制或十六进制形式变得相对简单。

C提供一些位运算符,称其为位运算符的原因是这些运算符单独操作一个值中的每一位。位反运算符(~)将其操作数中每一位取反,将1转换为0,反之亦然。位与运算符(&)用两个操作数形成一个值。如果两个操作数中某位都为1,那么结果值中对应位设为1。否则,该位设为0。位或运算符(1)同样用两个操作数形成一个值。如果两个操作数的某位中有一位为1,那么结果值中的对应位设为1;否则,该位设为0。位异或运算符(^)有类似的操作,但仅在两个操作数的对应位中只有一位设为1时,结果位才设为1。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

C还提供左移(<<)和右移(>>)运算符。每个运算符产生一个值,通过将一个位组合中的所有位向左或向右移动指定数量的位形成该值。对于左移运算符,空出的位设为0。对于右移运算符,如果值为无符号类型的,则空出的位设为0。对于有符号值,右移运算符的行为是依赖于实现的。

您可以使用结构中的位字段编址一个值中的个别位或多组位。具体细节依赖于实现。

这些位工具帮助C程序处理硬件问题,因此它们通常出现在依赖于实现的场合中。