第1章 十六进制计数法

第1章 十六进制计数法

第一章节主要是说明了数制的知识,讲解了二进制、十进制和十六进制,以及进制之间的互相转换。

我们日常都是使用十进制,因为计算机的电路原因,用高低电平表示数非常方便,所以就有了二进制,高电平代表1,低电平代表0。
因为二进制太长了,表达一些大的数字不太方便,且二进制和十六进制转换非常容易,所以就有了十六进制。

二进制和十六进制的转换就是从低位算起每4个对应一个十六进制。

image

后面用到GDT、LDT、TSS、TCB、内存寻址方式等都是用十六进制的,一开始看有点不太适应,看多了就习惯了。建议别把0x10念成十(shi),念幺零,这样容易理解些。

自己早年刚学习这些知识的时候,因为之前都是用十进制的原因,一开始有点转不过弯后,后来掌握了一句口诀就有点豁然开朗了。

逢N进1(N就是对应的数制)

  • 十进制:比如十进制就是逢10进1,从0,1,2,…到9的时候,要逢10了,就进1,就为10了。
  • 二进制:二进制也是类似,逢2进1,从0,1,要逢2了,就进1,就是10了。为了和十进制的10区分,就用10B表示。
  • 十六进制:十六进制逢16进1,从0,1,…F,要到16了,就是10了。十六进制表示数用0x10表示。

还有windows自带的计算器,简直是神器了,理解进制转换原理后,就可以用这个工具直接进行转换和查看了。

image

比较奇怪为什么书本没有介绍八进制?虽然不常用,但也是计算机的基础知识。八进制和二进制转换,就是每3位二进制对应一个十六进制。

另外这块基础知识也推荐看:【计算机科学速成课】[40集全/精校] - Crash Course Computer Science,很不错的入门科普视频。

image

还有哈工大刘宏伟老师的:计算机组成原理,其中也有介绍符号数、无符号数和小数等在计算机中的表示,非常硬核的内容。

image

<think>好的,用户之前问过关于C语言中%p格式说明符的问题,现在他提到“十六进制记数法”,我需要确定他具体想了解什么。可能他是在之前的讨论中对十六进制的使用有疑问,或者想更深入理解十六进制在编程中的应用。 首先,我需要回顾之前的对话。用户第一次询问的是p计数法的转换说明,我回答了%p用于指针地址,以十六进制输出。现在他补充说“我意思是十六进制记数法”,说明之前的回答可能没有完全解决他的疑问,或者他想更详细地了解十六进制本身。 接下来,我要考虑用户的身份和使用场景。他可能正在学习C语言,特别是关于内存地址和指针的部分,或者在进行底层编程、调试时遇到十六进制。也可能他在查看内存转储、网络协议或文件格式,这些地方常用十六进制表示。 用户的需求可能是想了解十六进制的基本概念,为什么在编程中常用它,以及具体的使用方法。他可能对二进制、十进制和十六进制的转换感兴趣,或者想知道如何在C语言中使用十六进制字面量,比如定义变量或输出格式。 需要确认十六进制记数法的定义、特点、应用场景,以及在C语言中的具体应用。例如,如何声明十六进制数,如何打印,位操作中的应用,内存地址的表示等。同时要解释为什么十六进制比二进制更方便,比如更紧凑,易于与二进制转换,以及人类可读性较好。 还要注意用户可能的误区,比如混淆%p和%x的区别。%p用于指针地址,而%x用于普通整数的十六进制输出,但两者都使用十六进制形式。需要明确区分它们的不同用途,避免用户混淆。 另外,用户可能对十六进制的转换方法不太清楚,比如如何手动转换十六进制和十进制,或者如何在代码中进行转换。可能需要提供示例代码,比如使用printf的不同格式说明符,或者位操作示例。 最后,确保回答结构清晰,分点说明,涵盖定义、特点、应用、C语言中的使用以及转换方法。避免过于技术性的术语,用简单易懂的语言,让初学者也能理解。同时,检查是否有遗漏点,比如常见问题或注意事项,例如大小写问题,前缀0x的使用等。</think>好的!**十六进制记数法**(Hexadecimal Notation)是一种基数为 16 的数值表示方法,广泛用于计算机科学、编程和硬件设计中。以下是详细介绍: --- ### **1. 基本规则** - **符号范围**: - 使用 **16 个符号**表示数值:`0-9` 表示 0 到 9,`A-F`(或 `a-f`)表示 10 到 15。 - 例如:`0x1A` 表示十进制中的 `26`。 - **前缀标识**: - 在编程中,十六进制数通常以 `0x` 或 `0X` 开头(如 `0xFF`、`0X1F`),以区别于十进制。 --- ### **2. 核心特点** - **二进制友好性**: - 1十六进制数(如 `F`)对应 **4 位二进制数**(如 `1111`),便于与二进制快速转换。 - 例如:`0x3F` → 二进制 `0011 1111`。 - **紧凑性**: - 相比二进制,十六进制更简短。例如,十进制 `255` 的二进制是 `11111111`,而十六进制是 `0xFF`。 --- ### **3. 应用场景** - **内存地址表示**: - 操作系统和调试工具常用十六进制显示内存地址(如 `0x7ffeeb0d1234`)。 - **颜色编码**: - 在 Web 开发中,颜色常用十六进制表示(如 `#FF0000` 表示红色)。 - **数据转储与协议**: - 网络协议(如 MAC 地址)、文件格式(如二进制文件头)常使用十六进制。 --- ### **4. C 语言中的十六进制** - **定义变量**: ```c int hex_num = 0x1A; // 等同于十进制的 26 ``` - **格式化输出**: - 使用 `%x`(小写)或 `%X`(大写)输出十六进制: ```c printf("小写: %x\n", 255); // 输出 ff printf("大写: %X\n", 255); // 输出 FF ``` - **位操作**: - 十六进制常用于掩码(Mask)操作: ```c int mask = 0xFF; // 二进制 00000000 00000000 00000000 11111111 ``` --- ### **5. 进制转换方法** - **十六进制 → 十进制**: - 按权展开求和,例如 `0x1F` = \(1 \times 16^1 + 15 \times 16^0 = 31\)。 - **十进制 → 十六进制**: - 反复除以 16,取余数逆序排列(余数 10-15 对应 `A-F`)。 - **二进制 → 十六进制**: - 每 4 位二进制转换为 1十六进制(不足补零)。 - 例如:`1101 1011` → `0xDB`。 --- ### **6. 与其他进制的对比** | 进制 | 符号范围 | 典型用途 | |------------|--------------|---------------------------| | 二进制 | `0-1` | 硬件底层操作、位运算 | | 十进制 | `0-9` | 日常计算 | | 十六进制 | `0-9, A-F` | 编程、内存地址、数据表示 | --- ### **示例代码(C语言)** ```c #include <stdio.h> int main() { int num = 0x2B; // 十六进制赋值(十进制为 43) printf("十进制: %d\n", num); // 输出 43 printf("十六进制(小写): %x\n", num); // 输出 2b printf("十六进制(大写): %X\n", num); // 输出 2B return 0; } ``` --- ### **常见问题** - **为什么用 `0x` 前缀?** 这是 C 语言的语法约定,用于区分十六进制和其他进制(如八进制的 `0` 前缀)。 - **十六进制大小写有区别吗?** 在数值上没有区别,但输出时 `%x` 和 `%X` 控制字母大小写。 --- 希望这些信息能帮助你理解十六进制记数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴空闲雲

感谢家人们的投喂

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值