十进制、八进制和十六进制,各种进制存在的意义,为什么要设计出来?

目录

一、表示方法

1、八 进制

定义:

编程中如何表达:

2、十六 进制

定义:

编程中如何表达:

二、各种进制存在的意义:

1、二进制的意义:

优势:

缺陷:

2、十进制的意义:

缺陷 - 容易出现计算问题

缺陷 - 有了 十进制,为什么要给计算机开发出 八进制、十六进制呢?

3、八进制的意义:

为什么偏偏是16或8进制,而不其它的,诸如 9 或 20 进制呢?

优势:

应用:

4、十六进制的意义:

概述:

重要应用 - 内存:

总结:


一、表示方法

1、八 进制

定义:

一种以8为基数的计数法,采用 0,1,2,3,4,5,6,7八个数字,逢八进1。

编程中如何表达:

所以规定,一个数如果要指明它采用八进制,必须在它前面加上一个 0(零),如:123 是十进制,但 0123 则表示采用八进制。这就是八进制数的表达方法。

2、十六 进制

定义:

它由 0-9,A-F 组成,字母不区分大小写。与 10 进制的对应关系是: 0-9 对应0-9; A-F 对应 10-15。
N进制的数可以用 0~(N-1) 的数表示,超过 9 的用字母 A-F。

编程中如何表达:

如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。

16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。

另外如:0xff, 0xFF, 0X102A, 等等。其中的 x 也不区分大小写。(注意:0x中的 0 是数字 0,而不是字母O)

 

二、各种进制存在的意义:

1、二进制的意义:

数据在计算机中的表示,最终以二进制的形式存在

优势:

这主要的原因由计算机的硬件有关,组成计算机系统的的逻辑电路只有两种状态,(接通和断开),只有两种发生的可能。

当我们的计算机受到干扰的时候,任然能清楚的识别出逻辑电路的状态(接通和断开)。

所以在具体的系统实现中,二进制的数据表达具有抗干扰能力强的优点。

相比之下,十进制设计的状态电路就有十种状态的电路,具体的系统实现会变得非常的负责,在判断中出现错误的可能性几率会大大增大。

缺陷:

书写起来冗长,与人类交互时表达不方便(准确的说应该是人类容易记录错误

比如 int 类型占用4个字节,32 位。比如 100,用 int 类型的二进制数表达将是:   

0000 0000 0000 0000 0110 0100   

面对这么长的数进行思考或操作,没有人会喜欢。

因此,C,C++ 没有提供在代码直接写二进制数的方法。

所以,推行了 16 进制和 8 进制。因为,进制越大,数的表达长度也就越短。

 

2、十进制的意义:

高级语言的称谓,其中之一就是能更好读懂。所以在使用高级语言,进行编程中,我们常用的还是 10 进制。毕竟是高级语言。   

比如:int a = 100,b = 99;

缺陷 - 容易出现计算问题

数 除尽 除不尽 的应用意义很大,除尽率 高的 数系 优势无疑更高,数论 研究表明,除尽 除不尽 与 除数 及 进制数 有关。

目前的十进制数中,除数能写成 2^p×5^q 的,都能够被所有十进制 整数 及 有限小数 除尽。

进制数越高除尽率越高也不是必然的,也有特殊性,譬如在民用常用的100以内的数中,六进制数的除尽率反而更高,所有能写成2^p×3^q的六进制数,都能够被所有六进制整数及有限小数除尽。

也就是说民用数其实 六进制数更有优势。

缺陷 - 有了 十进制,为什么要给计算机开发出 八进制、十六进制呢?

因为计算机底层使用的是二进制,而二进制转化为十进制较麻烦,不够直观。

但二进制转化为 八进制 或 十六进制 十分方便,3 位二进制可转化为 1 位八进制,4 位二进制可转化为 1 位十六进制。

 

3、八进制的意义:

为什么偏偏是16或8进制,而不其它的,诸如 9 或 20 进制呢?

2、8、16,分别是 2 的 1 次方,3 次方,4 次方。这一点使得三种进制之间可以非常直接地互相转换。

8 进制或 16 进制缩短了二进制数,但保持了二进制数的表达特点。

优势:

八进制的两个优点:

容易从字符 parse(使用 ASCII 时直接 char 减掉 0x30 就是其单一位数值),容易转字符串(单一位数值加 0x30 就是对应的字符的 ASCII 值)

容易从字符串 parse(直接移位再加就行…)

例如,你遇到一个八进制的数,要将其转化成比如说 int 类型的,不断读取字符,减 0x30,加上已有的结果左移 3 位的结果就行了,粗体字这里比使用十进制时的结果快…

二进制数据量太大,十进制计算太麻烦,十六进制解析太麻烦,八进制在这里正好。

应用:

Linux 文件权限(例如 chmod 644 中的这个数字)(当然这个跟文件权限的构造有关,跟上面说的 parse 没太大关系)

某些文件结构中的数据存储方式(例如 tar 打包时记录文件的大小和时间就是用八进制记录的)

 

4、十六进制的意义:

概述:

1、用于计算机领域的一种重要的数制   

2、对计算机理论的描述,计算机硬件电路的设计都是很有益的。比如逻辑电路设计中,既要考虑功能的完备,还要考虑用尽可能少的硬件,十六进制就能起到一些理论分析的作用。比如四位二进制电路,最多就是十六种状态,也就是一种十六进制形式,只有这十六种状态都被用上了或者尽可能多的被用上,硬件资源才发挥了尽可能大的作用。   

3、十六进制更简短,因为换算的时候一位16进制数可以顶 4 位 二进制数。

 

重要应用 - 内存:

一个内存地址存着一个对应的值, 内存就相当于(addr,val)的大 hash 表,c 语句的语义基本就是改变 hash 值。

如 int i = 3; 
假设 i 的内存地址为 0x8049320 ,那么这句话的语义是 0x8049320 = 3,经过 i = 3 后,i  为 (0x8049320,3)

int b = i;
假设 b 的内存地址为 0x8049324 ,那么这句话的语义是 0x8049324 = i 对应的 val = 3,此时 b 为 (0x8049324,3)

 

总结:

十进制 主要运用于日常生活当中,而 二进制、八进制、十六进制 主要运用于电子技术行业

二进制 是数字电路、处理器等最直接的语言,八进制、十六进制 由于有着方便转化记录的意义而使用

如今更多的是 十六进制 进行存储记忆,八进制 较少使用

处理器里的寄存器、存储器的地址、数据都是使用 十六进制 进行表示。

 

 

 

 

 

  • 14
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值