数据的存储(上)进制

288 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

在计算机中,数据类型分为整型与浮点型两种类型,而对于这两种类型的存储方式又有哪些异同? 我将分三章,对计算机的数据存储进行详细的介绍;

一、进制数

再详细介绍整型与浮点型的存储形式之前,先预铺垫一些二进制、八进制、十进制与十六进制之间表示与转换的基础。

1、R进制转十进制

R进制转换为十进制数采用权值累加的方法:

例一:将二进制数101.11转换为十进制数 1×2^2^+0×2^1^+1×2^0^+1×2^-1^+1×2^-2^=5.75

例二:将八进制数37.24转换为十进制数 3×8^1^+7×8^0^+2×8^-1^+4×8^-2^=31.3125

例三:将十六进制数B4.A转换为十进制数 11×16^1^+4×16^0^+10×16^-1^=180.625

将十进制数转换为R进制数分为两部分: 整数部分采用“除R取余法”,小数部分采用“乘R取整法”;

例一:十进制10转换为二进制 10除2 商 5 余 0 5 除 2 商2 余 1 2 除 2 商1 余 0 1 除 2 商0 余 1
当商为0时为止,此时将余数从高位向低位排,即1010; ==注意:整数部分,后得到的余数是高位==

例二:十进制0.75转换为二进制 0.75乘2 积1.5,小数部分为0.5 取整为 1 0.5 乘2 积1.0,小数部分为0 取整为 1 当小数部分为0时为止,此时将取整部分从高位向低位排,即0.11; ==注意:小数部分,先取整得到的是高位,这一点与整数部分相反==

2、进制数的表达

对于R进制来说,其能表达的最大的个位数是R-1,如二进制最大为1,最小为0,十进制最大为9,最小为0…… 较为特殊的是十六进制,个位上能对应0~15之间的数,分别为0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;

3、二进制、八进制、十六进制之间的转换

二进制的权值2^i^与八进制的权值8^i^、十六进制的权值16^i^之间的对应关系为8^i^=2^3i^,16^i^=2^4i^,也就是说,==每3位二进制数可以表示为1位八进制数,每4位二进制数可以表示为1位十六进制数==;

将一个二进制数转换为八进制数所用的方法为“取三合一法”,即以二进制的小数点为分界点,分别向左(整数部分),向右(小数部分)每3位分成一组,接着按组将这3位二进制按权相加,得到的数就是一位8位二进制数。然后,按顺序进行排列,小数点的位置不变,得到的数字就是所求的八进制数。如果取到最高或最低位时无法凑足3位,可以在小数点的最左边(整数部分的最高位)和最右边(小数部分最低位)补0,凑足3位。

将一个八进制数转换为二进制数所用的方法为“取一分三法”,即将一位的八进制数分解成3位的二进制数,将3位二进制按权相加去凑这位八进制数﹐小数点位置照旧。

以此类推,二进制数转换为十六进制数所用的方法为“取四合一法”;十六进制数转换为二进制数所用的方法为“取一分四法”。

例一:将二进制数10111010.11011转换为八进制数 010得到2,111得到7,010得到2,110得到6,11最终得到(272.66)8;

例二:将二进制数10111010.1101转换为十六进制数 1011得到B,1010得到A,1101得到D,最终得到(BA.D)16

例三:将八进制数37.25转换为二进制数 3分为011,7分为111,2分为010,5分为101,最终得到(11111010101)2

例四:将十六进制数5F.3C转换为二进制数 5分为0101,F分为1111,3分为0011,C分为1100,最终得到(0101111.001111)2;

对于八进制和十六进制之间的转换,可以现将其转换为二进制或十进制,然后再转换成所需要的进制数;

(干货)详解数据存储(中)——整型 (干货)详解数据存储(下)——浮点型