当前位置:嗨网首页>书籍在线阅读

24-本章小结

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

15.7 本章小结

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

C 提供多种按位运算符,之所以称为按位是因为它们单独操作一个值中的每个位。~运算符将其运算对象的每一位取反,将 1 转为 00 转为 1 。按位与运算符( & )通过两个运算对象形成一个值。如果两运算对象中相同号位都为 1 ,那么该值中对应的位为 1 ;否则,该位为 0 。按位或运算符( | )同样通过两个运算对象形成一个值。如果两运算对象中相同号位有一个为 1 或都为 1 ,那么该值中对应的位为 1 ;否则,该位为 0 。按位异或运算符( ^ )也有类似的操作,只有两运算对象中相同号位有一个为 1 时,结果值中对应的位才为 1

C还有左移( << )和右移( >> )运算符。这两个运算符使位组合中的所有位都向左或向右移动指定数量的位,以形成一个新值。对于左移运算符,空出的位置设为 0 。对于右移运算符,如果是无符号类型的值,空出的位设为 0 ;如果是有符号类型的值,右移运算符的行为取决于实现。

可以在结构中使用位字段操控一个值中的单独位或多组位。具体细节因实现而异。

可以使用 _Alignas 强制执行数据存储区上的对齐要求。

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