3、进制数转换
1、计算机信息的表示(存储)
1.1、例题解析
往年考过一道大题,问:数据和信息的关系是什么?
如果这么答,拿不到全分(数据是信息的载体,而信息是数据的解释),这样是不行的
我们需要单独解释下数据和信息是什么,再说他们的关系
- 数据是反映客观事物属性的记录,是信息的具体表现形式,数据进过加工处理后,就成为了信息;
- 而信息需要经过数字转化变成数据才能进行存储和传输
- 数据信息分为数值型(0,1,2,3,)和非数值型(a-z,A-Z,中文,视频,文档)
- 计算机能够区分不同的信息(计算机都是二进制),是因为他们采用了不同的编码规则(识别不同的,那么就是采用不同的二进制编码规则)
1.2、数制
也被称作===计数制,是指用一组 “固定的符号” ,和 “统一的规则” 来计数的方式
- 十进制(十进位计数制),生活中常用
- 二进制:计算机当中使用
- 除此:还有八进制(linux的权限),十六进制(一般用于内存编制,编号)
1.3、四个概念
- 数码
- 在数制这个规则下,表示基本数值的大小的不同数字符号
- 简单点讲就是,每个进制表示的数字不同,并且每个进制能使用的数字也不同
- 基数
- 数制当中能使用数码的个数,(他是几进制,就能使用几个数码)
- 位权
- 数制当中每个位置的价值
- 标识
- 为了区分不同的进制,在数字后面加上相应的字符或者括号外加上数字下标
- 例如下面这个
1.4.各个进制的概念图解
- 我们这里可以看到 十六进制的数码表示的有点不一样
- 原因是:如果十六进制代表的是0-15,那么在使用10-15的时候,会出现所谓的歧义
- 也就是多位数码之间,没有办法区分
- 例如
- 1115 === 它可以代表 1 1 1 5,也可以代表 11 15 || 1 11 5
- 这样就会发生歧义,导致我们无法对数据进行解密,转码等操作
1.5、问题引出 == 标识的作用
-
问了这么一个问题,10101是几进制?
-
在思维定式下,下意识回答二进制,但实际上0和1都是可以出现在其他进制当中的
-
这也是一种歧义的存在方式之一,那么面对这种歧义的情况,我们应该如何解决?
-
这个时候我们就需要使用我们之前提过的标识了
-
讲标识的时候需要注意以下几点
- 标识可以有两种写法,一种是括号下标,另一种是在数字后面加上相应的标识字母
- 十进制一般是不写标识的
- 二、八、十六进制的标识符需要背一下,括号下标的方式肯定要简单点
-
看下面几个例子
- 他们都代表二进制,从写法上来看,我个人认为括号下标的观赏性要更强一点
- 因为16进制也是存在字母B的
1.6、固定规则
1、进位规则
- 俗话说得好,进位规则,多少进制满多少,那么就向前进一
- 可以看上面的图,用十进制举例,9+1按照我们通俗的思想他就等于10
- 9在十进制当中属于价值最大的数,他 + 1 满10,那么就向前进一位
- 我感觉我的解释还是有点片面,等后面熟悉了在说
2、借位规则
- 上述就是我的解释,放在二进制,八进制,十六进制当中也是一个道理
- 忘了的话用计算机来计算就可以了
十六进制单独讲一个例子,巩固记忆
11 - 2 为什么等于F?
最后一个十六进制的写法,为什么H会多加一个空格,应该是为了怕混淆视听,本身ABCDF是没错的
2、进制转换
2.1、十进制 => R进制
- 这里的R指的是,十进制转换成任意进制
- 这里提到了一个东西叫做 十进制转换成R进制,实际上这个R进制就是代表你即将要转换的一个进制
- 我们这里记住一个口诀
- 整数部分:除以R,反向取余
- 小数部分:乘以R,正向取整
- 我们这里看几个例子,我自己手写几个例子
2.2、R进制转换成十进制
- 有了之前的了解,现在我们将任意进制转换成十进制相信理解上应该会简单一点
- 关于R进制转换成十进制,这里有一套口诀
- 乘权求合法: 每一位 的值,乘以对应的价值(位权)
- 标位权的时候注意以下两点
- 从个位开始标,小数和整数分开
- 位权是 0指数 开始,也就是(XXX的0次方开始)
1、例题
10110.011B => ?D
运算过程
2、八进制转换十进制
3、十六进制转换十进制
8A.4H = ? D?
重点
- 虽然A代表的是10,但是8A不能写作810
- 虽然A是10,但是它的位权只有一位
- 所以应该向上面那样写
2.3、8421拼凑法(二进制<=>十进制)
下面这部分其实就相当于乘权法,背出基本的2-10的次方
- 十进制和二进制相互转换一个比较简单的算法
- 我们来看个例子
1、十进制转二进制
解析
- 十进制数25,那么我们依次将2的n放列举出来,找出最接近这个十进制数的二进制数
- 例如这里最接近25,并且比25小的二进制数为16
- 那么按照上面的方式我们将16 => 后面的数依次组合就形成了我们的二进制数
- 组成25需要:1个16、1个8、0个4 、 0个2 、1个1
- 所以快速得出25D = 11001B
2、二进制转换十进制
- 其实做法和之前一样,也是例举出来,但是这个时候我们记下来的2的n方就很有用了,信手拈来
3、我自己出个题
我自己出题喜欢出稍微难度大点的,问:2578D转换为二进制是多少?
- 还是一样,依次例举出来,最接近2578,并且比2578小的数就是2048
- 那么就把2048往后的数依次写出来就行了
- 最终计算结果为 1010 0000 1001 0
- 计算器验证一下我们算的对否
- 计算机验证结果
- emmm,是我哪里写错的了,我看错了
2.4、二进制->八进制->十六进制
1、分组转换法
- 二转八:3位转换成1位
- 二转十六:4位转换成一位
- 注意
- 以小数点为界,整数和小数分开
- 整数位数不够在前面添0,小数位数不够在后面添0
2、例题
10101.1B = ?Q?
110101.1101B = ?H?
2.5、八进制,十六进制转换成二进制
1、还组转换法
- 八进制转换二进制: 1位还为3位
- 十六进制转换成二进制:1位还为4位
2、例题
16.32Q = ?B?(八转二)
F.3DH => ?B
注意,F和D只能占1位,不能拆开,我第一次计算的时候就犯了这个错
2.6、八进制转换成十六进制
- 要点
- 以二进制为 “桥梁”
- 实际操作结果就是
- 八进制先转换成二进制
- 二进制在转换成十六进制