常见进制和转换

文章详细介绍了十进制、二进制、八进制和十六进制的原理,包括它们的进位规则、基数和位权。强调了二进制在计算机底层的重要性,以及如何进行不同进制间的转换。此外,还讨论了数据存储的基本单位,如位、字节、千字节等,以及计算机内存和硬盘容量的表示差异。
摘要由CSDN通过智能技术生成

十进制

  • 最常用的计数方式,几乎全世界都在使用
  • 十进制就是满十进一的进制
  • 按权展开,第一位权为10^0,第二位 10^1 ……以此类推,第N位10^(N-1)。该数的数值等于每位的数值*该位对应的权值之和。
    十进制当中一共有10个数字,0 1 2 3 4 5 6 7 8 9,当9之后继续加1需要向前进一位开始循环,10 11 12 13 … 20 21 22

二进制

  • 计算机底层使用的计数方式
  • 满二进一,二进制中一共存在两个数字:0和1
  • 易于表现,实现简单,易于运算

二进制的产生

二进制是由德国哲学家、数学家莱布尼茨发明的。由于二进制只有0、1两个数字,所以可以很方便的在电路中表示:比如高电平用1表示、低电平用0表示。又比如开关的开用1表示、关用0表示,还可以表示逻辑的真假、是非等。就是因为其简便的方式所以在计算机的世界中也全都使用二进制来表示。图片、音乐、视频、文本文件等底层都是一串串的0和1组成的二进制。

例如上述图片的部分二进制表示如下:

十进制是逢9向高位进1。同样的二进制基数是2,因此是“逢二进一”
以计算机存储传输为例,可以将内存想象为一个一个的小格子,小格子中可以存储一个0或一个1,内存中的每一个小格子,我们称为1bit(位),一个字节(Byte)是8位(Bit)二进制,也就是说一个字节有8位的0或1。具体表现形式如下:

十进制二进制
10000 0001
20000 0010
30000 0011
40000 0100
50000 0101
60000 0110
70000 0111
80000 1000
90000 1001
100000 1010

八进制

  • 满八进一
  • 目前使用不是特别广泛,例如unix系统权限(chmod)
  • 它的优势可以避免使用非数字以外的符号(十六进制除了0-9之外,要用到A-E)
十进制二进制八进制
00000 00000
10000 00011
20000 00102
30000 00113
40000 01004
50000 01015
60000 01106
70000 01117
80000 100010
90000 100111
100000 101012
150000 111117
160001 000020
170001 000121

十六进制

  • 满十六进一
  • 十六进制中一共有16个数字,由于十六进制是满16才进位,所以十六进制中引入了a b c d e f来表示 10 11 12 13 14 15
  • 编程时候的内存调试,内存中数据、内存地址、html里面用一个8位16进制表示一个颜色一般都会以十六进制显示
  • 在查看二进制数据时,一般也会以十六进制的形式显示
十进制二进制八进制十六进制
00000 0000000
10000 0001101
90000 10011109
100000 1010120A
110000 1011130B
120000 1100140C
130000 1101150D
140000 1110160E
150000 1111170F
160001 00002010
170001 00012111
180001 00102212
190001 00112213
200001 01002414

小结

进制位十六
规则逢二进一逢八进一逢十进一逢十六进一
基数281016
数码0,10~70~909,AF(大小写不敏感)
位权2^i8^i10^i16^i
表示B(Binary)O(Octal)D(Decimal)H(Hexadecimal)

为什么要有二进制、八进制、十六进制?

二进制上述有说道是因为简便,可以很方便在电路中表示,尤其是计算机在传输数据时,我们知道网络在传输数据实际上就是在传输电信号,所以我们采用了二进制。

从上述表示示例中可以看出,进制越大标示的数据越简便,所以有了大的进制,而采用2、8、16进制是因为2、8、16分别是2的1次方,3次方,4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。

例如:十进制的100, 二进制表示为:0110 0100,八进制表示为:144,十六进制表示为:64

数据的存储

  • 基本单位
    • 位(Bit) ----- 可存储一位二进制数(0或1)
  • 存储容量
    • 1B(byte,字节) = 8 Bit
    • 1KiB(Kilobyte,千字节) = 1024B = 2^10 B = 1024bit * 8 = 8Kb
    • 1MiB(Mebibyte,兆字节,百万字节,简称"兆") = 1024KiB = 2^20 B
    • 1GiB(Gibibyte,吉字节,十亿字节,简称"千兆") = 1024MiB = 2^30 B

要注意的是这里采用的是二进制前缀表示法,由国际标准化组织(ISO)和国际电工委员会(IEC)联合制定和颁布,并且内存的单位制(JEDEC标准)也与之相同

  • 区别于十进制表示(国际单位制标准(SI))的容量单位
    • 1KB = 1000B = 10^3B
    • 1MB = 1000KB = 10^6B
    • 1GB = 1000MB = 10^9B
  • 硬盘生产商、Mac OS、Linux采用以GB(十进制,)计算
  • windwos采用GiB(二进制标准)计算
    • 这也是为什么会出现windows上的硬盘容量到linux显示并一致的原因
    • 同样根据硬盘厂商与用户对于1MB大小的不同理解,所以好多160G的硬盘实际容量按计算机的1MiB=1024KB算都不到1TB,这也可以解释为什么新买的硬盘“缺斤短两”并没有它所标示的那么大。
  • 当然国内用户一般理解为1MiB=1M=1024 KB, 所以为了便于中文化的理解,翻译MiB为MB都是可以的。
  • 字(word):若干字节(B)组成
  • 字长:是用来表示一次性处理事务的固定长度。一个字的位数,计算机系统结构中的重要指标
    • 计算机处理的典型数值也可能是以字长为单位。CPU和内存之间的数据传送单位也通常是一个字长。
    • 还有内存中用于指明一个存储位置的地址也经常是以字长为单位的。
    • 现代计算机的字长通常为16、32、64位。

中文字符、英文字符、标点符号分别占用多少字节?

  • utf8编码 长度1~3字节
    • 英文字符(字符和符号)占一个字节,中文字符(汉字和符号)占三个字节
  • ANSI编码
    • 英文字符(字符和符号)占一个字节,中文字符(汉字和符号)占两个字节
  • unicode编码
    • 英文字符(字符和符号)、中文字符(汉字和符号)都统一占两个字节

任意进制之间的转换

从上述对比我们可以了解到进制的规律:

  • n进制,逢n进一
    • 这里有个特殊的对称三进制:以-1、0、1来计数,感兴趣的可以自行百度
  • 基数:进制中允许使用的数码个数
    • 简单理解就是,可以出现多少个数字,二进制基数为2,八进制基数为8,十六进制基数为16

请添加图片描述

  • 位权:不同位置的数码说代表的数值,进制的位置 -1 次方
    • 个位位权:0,十位位权:1,百位位权:2 以此类推

请添加图片描述

知道这些之后我们开始拆解各个进制

这里用()10、()5分别来表示十进制、五进制

请添加图片描述

二进制拆解

请添加图片描述

这里是以十进制来拆解的二进制,如果以二进制来拆解二进制,如下所示

  • 由于二进制中不存在2,所以需要将2转换为10

请添加图片描述

转换之后通过乘法运算等到原来的二进制数
请添加图片描述

由此我们可以用来转换其他进制了

请添加图片描述

常见进制间转换

进制互换对照表
进制转换十 —> 二、八、十六二、八、十六 —> 十
整数部分小数部分
方法除基数倒取余乘基数顺序取整位权展开式
停止商为0小数为0
取数自下往上自上往下
  • 十进制 —> 二进制
    • 整数:除2倒取余数
    • 小数:除2倒取整数
  • 十进制 —> 八进制
    • 整数:除8倒取余数
    • 小数:除8倒取整数
  • 十进制 —> 十六进制
    • 整数:除16倒取余数
    • 小数:除16倒取整数

1)、二、八、十六进制 转换 十进制与上述同理,采用的是位权展示式

请添加图片描述

2)、十进制 转换 二、八、十六

  • 整数位:除基数取余
  • 小数位:乘基数取整

八进制示例: 十进制123 对应八进制位173

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AbT97kEb-1687919859400)(E:\桌面\bolg\图片八进制示例.png)]

二进制示例:十进制135 对应二进制1000 0111

请添加图片描述

其他进制以此类推

3)、二、八、十六进制间转换

二进制转八进制

  • 从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制的数字表示,不足3位用0补位**(取3合1)**,就得到一个八进制数

二进制转十六进制

  • 只要从小数点位置开始,向左或向右每四位二进制划分一组,不足四位数可补0**(取4合1)**,就得到一个十六进制

八进制和十六进制之间转换

  • 通过二进制作为中间态再去转换比较容易

视频讲解推荐观看:https://www.bilibili.com/video/BV1d34y1h7Z5/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值