我们知道数据在计算机中大多以二进制形式进行存储,那么到底什么是进制呢?下面展开说说:
在我们日常生活中我们经常使用的1,2,3,4,5,6,7,8,9,10,11,12......这些数字实际上就是十进制,通过观察可发现在数字10以后我们每增加一位都是在其各位进行加1操作直到加到10其十位才会发生变化,其实这种现象就是十进制的表现形式“逢十进一”;再如我们所说的一周七天结束之后又从周一开始,这种其实就是我们所说的七进制;
同样的二进制,十六进制也是同样的道理,前者“逢二进一”,后者“逢十六进一”;
进制 | 数码 | 基数 | 位权 |
十进制(D) | 0,1,2,3,4,5,6,7,8,9 | 10 | |
二进制(B) | 0,1, | 2 | |
十六进制(H) | 0-9,A,B,C,D,E,F | 16 |
数码:数据的范围;
基数:和其进制名称相对;
位权:基数的k次幂(其中k是当前位和小数点之间的距离,当当前位位于小数点左边,k的值是该位和小数点之间数码的个数,当该位位于小数点右边时k值为负数,并且是从左边第一位起以-1开始向右每每增加1位就减一次1);
举个栗子: 假设有 1 0(B) 则其按权展开(下面会具体讲到)就是: (1下面对应的) (0下面对应的)十进制同理这里就不赘述了;
我们来看若是十六进制呢?
1 0(H)按权展开:(1下面对应的) (0下面对应的)那么就会有一个问题,10-15怎样表示呢?所以我们就规定了在16进制中10-A,11-B,12-C,13-D,14-E,15-F;
所谓的按权展开法就是将R进制数的每一位数值用形式表示,R是基数,k是当前位和小数点之间的距离,当当前位位于小数点左边,k的值是该位和小数点之间数码的个数,当该位位于小数点右边时k值为负数,并且是从左边第一位起以-1开始向右每每增加1位就减一次1;
举个栗子:
那么如何将十进制转换成R进制呢?请继续往下看;
所谓短除法就是“除基取余”(直到商为0结束)再将最终的余数逆向获取得到最终的转化结果;
举个栗子:
“除基取余”其中 基(表示任意进制的基数)余(一定记得从下往上获取)
同样我们可以将上面的例子转化为十六进制,请看表演:
emmm.....虽然但是这样计算是不是有点繁琐呢?别急,请看下面;
拿十进制转二进制来看所谓减法就是找小于目标数据且距离目标数值最近的,用该值减去目标值,我们将减出来的值再用同样的方法“找,减”直到减出来的值为0时结束;
举个栗子:
整理可得如下表格:(在二进制中只有0,1,则在计算中未涉及到的的取值用0表示)
位号 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
取值 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
在运用减法时我们不难发现一个问题,我们每次都需要对数据进行一个大致的判断,这就要求我们要熟悉掌握一些指数幂的取值情况对于二进制来讲,如下表记住可能会更利于我们后期的计算;
那么如何实现将二进制转化成八进制or十六进制呢?下面展开说说;
在八进制中其码数为0,1,2,3,4,5,6,7 如果将其每一位都展开用二进制表示的话则:
0-0,1-1,2-10,3-11,4-100,5-101,6-110,7-111,其中最大位7用三位二进制数表示,规范一下其余的(高位补0)我们就会得到0-000,1-001,2-010,3-011,4-100,5-101,6-110,7-111;由此可以发现每三位二进制数可确定一位八进制数,!!!!转动我们聪明的大脑我们将十六进制数展开用二进制数表示可以发现四位二进制数可确定一位十六进制数~,
下面就让我们来看个栗子:(图一进制转八进制,图二二进制转十六进制)
看完是不是感觉又又又又一次长芝士了?那还不赶紧撸起袖子试一试?