计算机以及网络协议中常用16进制的原因

一、计算机为什么需要十六进制?

实际上计算机本身是不需要十六进制的,计算机只需要二进制,需要十六进制的是人。

每个十六进制中的数字代表4个比特,你可以非常直观的从十六进制中知道对应的二进制是啥,比如给定一个十六进制数,假设其最后一位是9,那么你立刻就能知道将该十六进制数字转为二进制后最后四位是1001

十六进制数字9对应的二进制为1001
十六进制数字19对应的二进制为0001 1001
十六进制数字119对应的二进制为0001 0001 1001

但是如果给定一个十进制数字,同样假设其最后一位是9,你知道其对应的二进制吗,显然你是不知道的。

十进制数字9对应的二进制为1001。
十进制数字19对应的二进制为1 0011。
十进制数字119对应的二进制为111 0111。

在十进制中你必须知道所有的进位上的数字后才可以将其转为二进制,这非常不直观,显然如果你想把复杂的十进制数字转为二进制不稍加计算是搞不定的。

因此我们可以得出结论:

十六进制是二进制的好朋友,但十进制不是

那为什么十六进制是二进制的好朋友呢?

关键在于进制数16是2的4次方,24 = 16,而进制数10并不是2的整数次幂,因此8进制(23),16进制(24),32进制(25),64进制(26)等等都是二进制的好朋友。

有的同学肯定会问,那么为什么我们不使用32进制呢?

使用32进制,每5个比特位可以用一个32进制数字来表示,由于人类的数字系统只有0~9,因此在16进制中10是字母a来表示的、11:b、12:c、13:d、14:e、15:f,但如果我们使用32进制,那么16:g、17:h…31:v,这时给一个32进制数字“apple”,你的大脑可能会一团浆糊,但十六进制对人类来说基本可以应付得来,原因就在于16进制中人类熟悉的数字占据了10个,剩下的只借用了6个字母,还算简单。

因此32进制及以上都不太适合给人使用,原因就在于:

可读性太差。

此外使用十六进制还有一个重要原因:

一个字节有8个比特

我们知道内存是按照字节粒度来寻址的,因此采用的数字系统必须很好的表达一个字节,也就是8比特,从这个角度上看256进制(2^8)是最好的,因为一个256进制就是表达一个字节,但还是基于可读性的原因,256进制对于人类来说记忆负担过重,而16进制则刚刚好,一个16进制数字表示一个字节的一半(4个比特),两个16进制数字正好表示一个字节。

那为什么一个字节有8比特而不是7比特或者9比特呢?其实答案很简单:

历史原因

要知道早期的计算机可不是一个字节8比特,那时一个字节4比特、6比特或者7比特的都有。

但4比特或者6比特还是太受限制,因为我们需要把字母数字以及标点符号等等转为二进制表示,4比特或6比特能表示的数量太少。

到了1963年,ASCII正式提出,该标准使用7比特来表示字符,但当时的IBM System/360大型机采用了8比特字节,使得8比特字节开始流行起来,到后来微型计算机出现时也自然采用了这一表示方法。

现在你应该明白了吧。

第一部分转自计算机为什么需要十六进制?


二、通讯协议必须16进制输入吗?

在现代网络中,通讯协议是一种标准的规则,它指导网络设备如何交换信息。这些交换的信息必须以十六进制的形式输入,而不是其他形式,才能保证信息的一致性和准确性。本文将介绍十六进制的基本概念,讨论它为什么是通讯协议的标准输入,以及它与其他输入形式的比较。

                什么是十六进制?
  十六进制是一种数字系统,它使用16种数字(0-9和A-F)来表示数字。它可以用来表示任何数字,从0到15,也可以用来表示更大的数字,比如16,17,18,等等。十六进制的优势在于它比十进制更简洁,更容易理解。

            为什么十六进制是通讯协议的标准输入?
  因为十六进制更容易理解,更容易被网络设备识别,所以它是通讯协议的标准输入。十六进制可以更轻松地表示数字,比如一个字节(8位)可以用两个十六进制数字表示,而十进制需要三个数字。这意味着用十六进制表示的数据可以更轻松地传输,从而提高网络性能。

            十六进制与其他输入形式的比较

                  二进制
  二进制是一种基于0和1的数字系统,它比十六进制更加简洁,但是不够容易理解。它只能用来表示两个状态:0或1。因此,它不能用来表示更复杂的数据,也不能用于通讯协议。

                  八进制
  八进制是一种基于0-7的数字系统,它比十六进制更容易理解,但不如十六进制简洁。它可以用来表示更复杂的数据,但不能用于通讯协议,因为它不能提供足够的精度。

                  十进制
  十进制是一种基于0-9的数字系统,它比十六进制容易理解,但不如十六进制简洁。它可以用来表示更复杂的数据,但不能用于通讯协议,因为它不能提供足够的精度。

                  总结
  十六进制是一种数字系统,它使用16种数字(0-9和A-F)来表示数字。它比十进制更简洁,更容易理解,因此它是通讯协议的标准输入。它可以更轻松地表示数字,比如一个字节(8位)可以用两个十六进制数字表示,而十进制需要三个数字。它比二进制和八进制都更容易理解,也比十进制更简洁,因此是通讯协议的标准输入。

第二部分转自通讯协议必须16进制输入吗?


三、程序员基本功,为什么你一定要懂16进制?
此文章主要阅读后半段与内存地址有关的内容。若觉得前半段较啰嗦可以跳着看也可以跳过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/13816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第八届“英拿科技杯”上海高校金马程序设计联赛暨东华大学邀请赛——源石虫(基础DP)

题源 源石虫 &#xff08;小声哔哔&#xff1a;这题当时脑子抽了死活没想到是DP&#xff0c;一直用贪心试&#xff0c;拿来凑个DP专题的数&#xff09; 代码 #include <bits/stdc.h> using namespace std; using ll long long; #define For for (ll i 1; i < n; …

ROS | 实现SLAM的功能

用launch文件启动Hector_Mapping的建图功能 1.引入launch文件 2.args是引入的设置好的rviz文件 Hector_Mapping建图的参数设置

141.字符串:重复的字符串(力扣)

题目描述 代码解决 class Solution { public:// 计算字符串s的next数组&#xff0c;用于KMP算法void getNext(int *next, const string& s){int j 0; // j是前缀的长度next[0] 0; // 初始化next数组&#xff0c;第一个字符的next值为0for (int i 1; i < s.size(); …

Clickhouse 算术函数操作总结—— Clickhouse 基础篇(五)

文章目录 加法函数减法函数乘法函数浮点除法函数整数除法函数带0整数除法函数取余函数带0取余函数负数函数绝对值函数最大公约数函数最小公倍数函数最大数函数最小数函数 加法函数 加法函数不仅可以计算数字&#xff0c;还可以使用日期和时间来进行加法运算。日期加的是天数&a…

2024 中青杯高校数学建模竞赛(B题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024 长三角高校数学建模竞赛&#xff08;A题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过…

ubuntu server 22.04 使用docker安装 onlyoffice 8.0同时添加中文字体、字号

本文主要介绍在ubuntu server 22.04 系统上使用docker安装onlyoffice 8.0同时添加中文字体、字号方法。 1、硬件要求 CPU&#xff1a;双核2 GHz或更高 内存&#xff1a;最少4GB 硬盘&#xff1a;至少40 GB可用空间 Swap file&#xff1a;至少4 GB&#xff0c;但取决于主机操作…

[GUET-CTF2019]encrypt

我自己大致分析的是输入flag然后先 RC4加密再 base64加密&#xff0c;解了一下发现不对。 那就只能仔细分析了&#xff0c;看有没有魔改 嗯&#xff0c;可以动调试试&#xff0c;嗯就是要找其 key 的值 &#xff1a;0x10,0x20,0x30,0x30,0x20,0x10,0x40 aaaaaaaaaa--->dd…

MobaXterm使用私钥远程登陆linux

秘钥的形式使用MobaXterm 远程连接 linux 服务器 MobaXterm使用私钥远程登陆linux just填写远程主机 不指定用户 勾选使用私钥 选择私钥即可 1.使用秘钥连接 远程linux 服务器的好处 只需要第一次添加秘钥&#xff0c;并输入密码后&#xff0c;以后再连接就不需要再输入密码…

【每日刷题】Day47

【每日刷题】Day47 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 112. 路径总和 - 力扣&#xff08;LeetCode&#xff09; 2. 2404. 出现最频繁的偶数元素 - 力扣&am…

PostgreSQL的版本号规则

PostgreSQL的版本号规则 PostgreSQL 版本号规则在随着时间的推移有所变化&#xff0c;以便更好地反映功能和修补版本的发布。以下是 PostgreSQL 版本号的规则&#xff0c;以及在不同阶段所采用的版本号规范。 版本号规则 从 PostgreSQL 10 开始&#xff0c;版本号采用了 MAJ…

ubuntu20.04安装cmake3.22.1

背景 由于第一套上位机windows clion22 嵌入式ubuntu20.04的开发环境中&#xff0c;ubuntu20.04上安装的是cmake3.22.1, 为了保持一致&#xff0c;需要指定安装的cmake版本。 下载指定版本的cmake 进入cmake官网的download页面&#xff0c;https://cmake.org/download/&…

番外篇 | YOLOv8改进之更换主干网络MobileNetv3 + 添加CA注意力机制

前言:Hello大家好,我是小哥谈。MobileNetv3是一种轻量级网络,采用了深度可分离卷积等轻量化技术,具有较小的模型参数量和计算复杂度,适合在计算能力较弱的设备上运行。本节课就让我们结合论文来对YOLOv8进行组合改进(更换主干网络MobileNetv3 + 添加CA注意力机制),希望…

第06章 数据加载、存储与文件格式

以下内容参考自https://github.com/iamseancheney/python_for_data_analysis_2nd_chinese_version/blob/master/%E7%AC%AC05%E7%AB%A0%20pandas%E5%85%A5%E9%97%A8.md 《利用Python进行数据分析第2版》 用以学习和记录。 输入输出通常可以划分为几个大类&#xff1a;读取文本文…

【Linux学习】进程基础API

下面是有关进程基础API的相关介绍&#xff0c;希望对你有所帮助&#xff01; 小海编程心语录-CSDN博客 目录 1. 僵尸进程与孤儿进程 1.1 孤儿进程 1.2 僵尸进程 2. 监视子进程 2.1 wait() 2.2 waitpid() 3. 执行新程序 exec族函数 4. 守护进程 1. 僵尸进程与孤儿进程…

(5)SK插件

&#xff08;5&#xff09;SK插件 什么是AI插件&#xff1f; 使用人工智能插件的目的是通过利用人工智能能力来增强软件应用程序的功能。人工智能插件可以提供各种功能&#xff0c;如自然语言处理、图像识别、预测分析等。 通过将AI插件集成到应用程序中&#xff0c;您可用为…

通过 Spring 操作 Redis

要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务器&#xff0c;推荐看通过 Java 操作 redis -- 连接 redis 创建项⽬ 勾选 NoSQL 中的 Spring Data Redis 当然, 把 Web 中的 Spring Web 也勾选⼀下.⽅便写接进⾏后续测试. 配置 redis 服务地址 在 application.…

基于springboot + vue实现工厂车间管理系统项目演示【附项目源码+论文说明】

基于springboot vue实现工厂车间管理系统演示 摘要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜…

PasteSpider更新摘要(持续更新... .. .)

写在前面 PasteSpider整个项目分为三大块PasteSpider(主端我称为API(.net 6.0)),PasteSpiderWeb(后台管理端(js,html,css)),PasteSpiderFile(文件同步端(.net6.0)&#xff0c;一键部署&#xff0c;差量同步等就是用他&#xff0c;不然每次升级要打开网站后台很麻烦的&#xff…

springboot+jsp校园理发店美容美发店信息管理系统0h29g

前台管理:会员管理、会员预定、开单点单、收银结帐、技师提成 后台管理:数据维护、物料管理、数据查询、报表分析、系统设置等 灵活的付款方式&#xff0c;支持现金、挂帐、会员卡&#xff0c;同时支持多种折扣方式并可按用户要求设置多种结帐类型善的充值卡管理模块:支持优惠卡…

大创项目推荐 深度学习手势识别 - yolo python opencv cnn 机器视觉

文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…