(学习笔记)2.1 信息存储(2.1.1 十六进制表示法)

文章目录


线索栏

  1. 计算机内存的最小可寻址单位是什么?程序视角中的"内存"叫什么?
  2. C语言中"指针"的本质是什么?它和"类型"有什么关系?
  3. 为什么需要十六进制表示法?相比于二进制和十进制,它的优势是什么?
  4. 单个十六进制数字对应多少位二进制数?
  5. 如何快速将2的n次幂(如211)转换为十六进制?
  6. (复习)如何进行十六进制与二进制之间的快速转换?
  7. (复习)如何进行十进制与十六进制之间的转换?

笔记栏

引言部分

1)最小可寻址单位

字节(Byte, 8位)。

2)虚拟内存

机器级程序将内存视为一个巨大的字节数组,每个字节有唯一地址。此"统一视图"由DRAM、磁盘、OS等协作实现(详见第9章)。

3)指针(C语言)

(1)本质:一个存储块的首字节的虚拟地址。

(2)值与类型:指针的值是地址;类型指示了该地址起始处存储的对象的类型(如int*, float*)。编译器利用类型信息生成正确的机器指令,但机器码本身不包含类型信息。

(3)作用:引用数据结构(如数组)元素的机制。

2.1.1 十六进制表示法

1)为什么是十六进制?

(1)二进制:冗长,不便于人类阅读和书写。

(2)十进制:与位模式转换麻烦。

(3)十六进制:每1位十六进制数对应4位二进制数,转换直观,是二进制简洁的简写形式,是表示位模式的理想工具。

2)进制转换的核心方法与技巧

十六进制 ↔ 二进制(核心,必须掌握)

(1)Hex → Bin:将每个十六进制数字直接展开为4位二进制。

例:0x173A4C → 0001 0111 0011 1010 0100 1100

(2)Bin → Hex:从右向左每4位一组(最左一组可少于4位,左补0),每组转为1位十六进制。

例:11 1100 1010 1101 1011 0011 → 0011 1100 1010 1101 1011 0011 → 0x3CADB3

(3)记忆技巧:重点记住A(10), C(12), F(15)的十进制值,B(11), D(13), E(14)可推算。

2的幂次 ↔ 十六进制(快速技巧)

(1)若 x = 2n,其二进制为 1 后跟 n 个 0。

(2)十六进制中,每4个二进制0对应一个十六进制0。

(3)快速算法:将 n 表示为 i + 4j(0 ≤ i ≤ 3),则十六进制形式为:[1,2,4,8] 中第 i 个数字,后跟 j 个十六进制0。

例:211, n=11=3+4 * 2 → i=3对应开头数字8,j=2→跟2个0,结果为0x800。

十进制 ↔ 十六进制(一般方法)

(1)Dec → Hex(连除法):反复除以16,记录余数(转为十六进制数字),直到商为0。余数序列从后向前读即为结果。

例:314156 → 0x4CB2C(计算过程见教材)。

(2)Hex → Dec(乘权求和):每位数字乘以对应的16的幂次,然后求和。

例:0x7AF = 7 * 162+ 10 * 16 + 15 = 1967。

(3)工具:大数转换建议使用计算器或搜索引擎。

混合进制运算

(1)原则:统一进制后再计算。

(2)方法:将非十六进制数转换为十六进制,然后进行十六进制加减法。

例:0x503c + 64 → 64(Dec) = 0x40 → 0x503c + 0x40 = 0x507c。

十六进制加减法:逢16进1,借1当16。

练习题

(1)练习题2.1(进制转换)

A. 0x39A7F8→ 0011 1001 1010 0111 1111 1000

B. 1100 1001 0111 1011→ 0xC97B

C. 0xD5E4C→ 1101 0101 1110 0100 1100

D. 1001 1011 1001 1110 1101 0101→ 0x9B9ED5

答案:

(2)练习题2.2(2的幂次表)

运用 n = i + 4j速算法填充。例如 219, n=19=3+4 * 4→ 0x80000。

答案:

(3)练习题2.3(字节模式转换)

综合运用十进制、二进制、十六进制间的转换。例如十进制167:

167 = 128 + 32 + 4 + 2 + 1 → 二进制 1010 0111→ 十六进制 0xA7。

答案:

(4)练习题2.4(十六进制运算)

关键:将非十六进制数(如十进制64)先转换为十六进制(0x40)。

计算:如同十进制加减,注意进位/借位以16为基数。

A. 0x503c + 0x8 = 0x5044

B. 0x503c - 0x40 = 0x4ffc

C. 0x503c + 64 = 0x503c + 0x40 = 0x507c

D. 0x50ea - 0x503c = 0xAE

答案:


总结

本节构建了程序看待内存的基础模型------虚拟地址空间,并引入了C语言中指针作为地址引用的核心概念。为了高效地表示和操作内存中的位模式,十六进制表示法成为了关键工具。

必须熟练掌握的核心技能:

  1. 十六进制与二进制间的快速互转(基于4位一组的对应关系)。
  2. 2的幂次在十六进制中的表示规律(n = i + 4j速算法)。
  3. 在十六进制下直接进行算术运算(避免绕道十进制)。

这些技能是后续理解数据的具体存储格式(整数、浮点数)和进行底层调试(如用调试器查看内存内容)的必备前提。

相关推荐
-To be number.wan2 小时前
算法学习日记 |贪心算法
c++·学习·算法·贪心算法
知识分享小能手2 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 规则、默认值和完整性约束 —— 语法详解与实战案例(11)
sql·学习·sqlserver
神明不懂浪漫2 小时前
【第十三章】操作符详解,预处理指令详解
c语言·开发语言·经验分享·笔记
此刻觐神2 小时前
Windows学习笔记-18(MFC项目-制作快捷方式管理工具)
windows·笔记·学习·mfc
科技林总3 小时前
【系统分析师】7.8 软件形式化方法
学习
FakeOccupational3 小时前
【电路笔记 元器件】存储设备:RAM 静态随机存取存储器(SRAM)芯片+异步 SRAM 的特性+异步 SRAM读写测试(HDL)
笔记·fpga开发
Alice_whj3 小时前
AI云原生笔记
人工智能·笔记·云原生
Lyan-X4 小时前
鲁鹏教授《计算机视觉与深度学习》课程笔记与思考 ——13. 生成模型 VAE:从无监督学习到显式密度估计的建模与实现
人工智能·笔记·深度学习·计算机视觉
weixin_458872614 小时前
东华复试OJ每日3题打卡·复盘76~78
学习