(学习笔记)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. 在十六进制下直接进行算术运算(避免绕道十进制)。

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

相关推荐
南境十里·墨染春水21 小时前
linux学习进展 信号
linux·服务器·学习
不灭锦鲤21 小时前
每天学习新的漏洞,react2shell漏洞
学习
悠哉悠哉愿意1 天前
【物联网学习笔记】TIM
笔记·单片机·嵌入式硬件·物联网·学习
中屹指纹浏览器1 天前
2026指纹浏览器技术选型与落地踩坑指南:从需求匹配到风险规避
经验分享·笔记
编程百晓生1 天前
《SAP FICO系统配置从入门到精通共40篇》021、CO-PC实战笔记:在制品与差异计算,那些年车间里的“账实不符”
服务器·人工智能·笔记·ar·从入门到精通·sap fico·sap fico系统
WYiQIU1 天前
宇树科技Web前端岗(AI方向),这不算泄题吧......
前端·vue.js·人工智能·笔记·科技·面试·职场和发展
炽烈小老头1 天前
【每天学习一点算法 2026/04/17】多数元素
数据结构·学习·算法
2501_916007471 天前
从零开始学习iOS开发:Xcode环境配置与项目创建完整指南
ide·vscode·学习·ios·个人开发·xcode·敏捷流程
星幻元宇VR1 天前
VR动感电动车|以沉浸体验推动交通安全科普新方式
人工智能·科技·学习·安全·生活·vr
驭渊的小故事1 天前
Java的类和对象的笔记
笔记