- 内容提要
- 前言
- 第 1 章 预备知识
- 第 2 章 开始学习 C++
- 第 3 章 处理数据
- 第 4 章 复合类型
- 第 5 章 循环和关系表达式
- 第 6 章 分支语句和逻辑运算符
- 第 7 章 函数——C++的编程模块
- 第 8 章 函数探幽
- 第 9 章 内存模型和名称空间
- 第 10 章 对象和类
- 第 11 章 使用类
- 第 12 章 类和动态内存分配
- 第 13 章 类继承
- 第 14 章 C++中的代码重用
- 第 15 章 友元、异常和其他
- 第 16 章 string 类和标准模板库
- 第 17 章 输入、输出和文件
- 第 18 章 探讨 C++新标准
- 附录 A 计数系统
- 附录 B C++保留字
- 附录 C ASCII 字符集
- 附录 D 运算符优先级
- 附录 E 其他运算符
- 附录 F 模板类 string
- 附录 G 标准模板库方法和函数
- 附录 H 精选读物和网上资源
- 附录 I 转换为 ISO 标准 C++
- 附录 J 复习题答案
A.5 二进制和十六进制
十六进制表示法常用于提供更为方便的二进制数据(如内存地址或存储位标记设置的整数)视图。这样做的原因是,每个十六进制位对应于 4 位。表 A.2 说明了这种对应关系。
表 A.2 十六进制数和对应的二进制数
十六进制位 | 对应的二进制数 |
---|---|
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
A | 1010 |
B | 1011 |
C | 1100 |
D | 1101 |
E | 1110 |
F | 1111 |
要将十六进制值转换为二进制,只需将每个十六进制位替换为相应的二进制数即可。例如,十六进制 0xA4 对应于二进制数 10100100。同样,可以轻松地将二进制值转换为十六进制,方法是将每 4 位转换为对应的十六进制位。例如,二进制值 10010101 将被转换为 0x95。
Big Endian 和 Little Endian
奇怪的是,都使用整数的二进制表示的两个计算平台对同一个值的表示可能并不相同。例如,Intel 计算机使用 Little Endian 体系结构来存储字节,而 Motorola 处理器、IBM 大型机、SPARC 处理器和 ARM 处理器使用 Big Endian 方案(但最后的两种系统可配置成使用上述任何一种方案)。
术语 Big Endian 和 Little Endian 是从“Big End In”和“Little End In”(指内存中单词(通常为两个字节)的字节顺序)衍生而来的。在 Intel 计算机(Little Endian)中,先存储低位字节,这意味着十六进制值 0xABCD 在内存中将被存储为 0xCD 0xAB。Motorola(Big Endian)计算机按相反的顺序存储,因此 0xABCD 在内存中被存储为 0xAB 0xCD。
这些术语最先出现在 Jonathan Swift 编写的《Gulliver’s Travels》一书中。为讽刺众多政治斗争的非理性,Swift 杜撰了假想国中两个喜欢争论的政治派别:Big Endians 和 Little Endians,前者坚持认为从大的一头打破鸡蛋更合理,而后者坚持认为从小的一头打破鸡蛋更合理。
作为软件工程师,应了解目标平台的词序,它会影响对通过网络传输的数据的解释方式以及数据在二进制文件中的存储方式。在上面的例子中,二字节内存模式 0xABCD 在 Little Endian 计算机上表示十进制值 52651,而在 Big Endian 计算机上表示十进制值 43981。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论