二进制、八进制、十六进制
- 格式:docx
- 大小:40.95 KB
- 文档页数:5
2进制、8进制和16进制与10进制的转换过程在数字的世界里,我们经常使用不同的进制来表示数值。
最常用的进制是十进制,但还有其他的进制,如二进制、八进制和十六进制。
这些进制与十进制之间可以进行转换,下面我们来探讨一下这些转换过程。
首先,我们来看一下二进制、八进制和十六进制是如何转换为十进制的。
二进制是基数为2的进制,它只有两个数码:0和1。
例如,二进制数1101转换为十进制数的计算过程如下:1 * 2³ + 1 * 2² + 0 * 2¹ + 1 * 2⁰ = 13所以,二进制数1101转换为十进制数是13。
八进制是基数为8的进制,它有八个数码:0、1、2、3、4、5、6和7。
例如,八进制数3725转换为十进制数的计算过程如下:3 * 8³ + 7 * 8² + 2 * 8¹ + 5 * 8⁰ = 2021所以,八进制数3725转换为十进制数是2021。
十六进制是基数为16的进制,它有十六个数码:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E和F。
例如,十六进制数AF12转换为十进制数的计算过程如下:A * 16³ + F * 16² + 1 * 16¹ + 2 * 16⁰ = 419448所以,十六进制数AF12转换为十进制数是419448。
接下来,我们来看一下十进制是如何转换为二进制、八进制和十六进制的。
十进制数转换为二进制数的方法是不断除以2,直到商为0为止。
例如,十进制数13转换为二进制数的计算过程如下:13 / 2 = 6 余 16 / 2 = 3 余 03 / 2 = 1 余 11 /2 = 0 余 1所以,十进制数13转换为二进制数是1101。
十进制数转换为八进制数的方法是不断除以8,直到商为0为止。
例如,十进制数2021转换为八进制数的计算过程如下:2021 / 8 = 252 余 5252 / 8 = 31 余 431 / 8 = 3 余 73 / 8 = 0 余 3所以,十进制数2021转换为八进制数是3725。
进制的认识二进制八进制十六进制的基本概念在计算机科学和信息技术领域,进制是一个重要的概念。
进制是一种数制法,用于表示数字和字符。
常见的进制有十进制、二进制、八进制和十六进制。
本文将介绍这些进制的基本概念以及它们在计算机领域中的应用。
一、基础概念1. 二进制(Binary)二进制是一种使用两个数字0和1来表示数值的进制。
在二进制中,每个数字位都是2的幂次加权的。
例如,二进制数1101表示(1×2³)+(1×2²)+(0×2¹)+(1×2⁰)= 13。
2. 八进制(Octal)八进制是一种使用八个数字0-7来表示数值的进制。
在八进制中,每个数字位都是8的幂次加权的。
例如,八进制数725表示(7×8²)+(2×8¹)+(5×8⁰)= 477。
3. 十六进制(Hexadecimal)十六进制是一种使用十六个数字0-9和字母A-F来表示数值的进制。
在十六进制中,每个数字位都是16的幂次加权的。
例如,十六进制数1D2表示(1×16²)+(13×16¹)+(2×16⁰)= 466。
二、进制转换计算机中常用的进制是二进制,而人类常用的进制是十进制。
在计算机科学中,经常需要在不同进制之间进行转换。
1. 十进制转二进制十进制转二进制的方法是通过除2取余法。
将十进制数逐次除以2,直到商为0为止,然后将所得余数从低位到高位依次排列,即可得到二进制数。
例如,将十进制数13转换为二进制数:13 ÷ 2 = 6 ... 余数1,6 ÷ 2 = 3 ... 余数0, 3 ÷ 2 = 1 ... 余数1, 1 ÷ 2 = 0 ... 余数1,所得的余数序列为1101。
2. 二进制转十进制二进制转十进制的方法是将二进制数的每一位与相应的权重相乘,然后将乘积相加。
各种进制之间的转换方法进制转换是指将数字从一种进制表示转换为另一种进制表示。
常见的进制有二进制、八进制、十进制和十六进制。
下面将详细介绍各种进制之间的转换方法。
1.二进制转换为十进制:二进制数是由0和1组成的数字序列。
转换为十进制的方法是,将二进制数每一位上的数字乘以2的幂次方,然后将得到的结果相加。
例如:将二进制数1101转换为十进制,计算方法为:1*2^3+1*2^2+0*2^1+1*2^0=8+4+0+1=132.八进制转换为十进制:八进制数是由0到7之间的数字组成的数字序列。
转换为十进制的方法与二进制类似,只是要将八进制数每一位上的数字乘以8的幂次方,然后将得到的结果相加。
例如:将八进制数157转换为十进制,计算方法为:1*8^2+5*8^1+7*8^0=64+40+7=1113.十六进制转换为十进制:十六进制数是由0到9和A到F之间的数字和字母组成的数字序列,其中A表示十进制的10,B表示十进制的11,以此类推。
转换为十进制的方法是,将十六进制数每一位上的数字或字母转换为对应的十进制数,然后将得到的结果相加。
例如:将十六进制数1E8转换为十进制,计算方法为:1*16^2+14*16^1+8*16^0=256+224+8=4884.十进制转换为二进制:将十进制数转换为二进制的方法是,使用除2取余法。
即将十进制数连续除以2,将得到的余数从下往上排列,直到商为0为止。
例如:将十进制数43转换为二进制,计算方法为:43÷2=21余121÷2=10余110÷2=5余05÷2=2余12÷2=1余01÷2=0余15.十进制转换为八进制:将十进制数转换为八进制的方法是,使用除8取余法。
即将十进制数连续除以8,将得到的余数从下往上排列,直到商为0为止。
例如:将十进制数145转换为八进制,计算方法为:145÷8=18余118÷8=2余22÷8=0余2从下往上排列得到八进制数2216.十进制转换为十六进制:将十进制数转换为十六进制的方法是,使用除16取余法。
二进制,八进制,十进制,十六进制之间的转换1.什么是二进制二进制是计算技术中广泛采用的一种数制。
二进制数据是用0和1两个数码来表示的数。
它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。
当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。
计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。
信息的存储单位位(Bit) :度量数据的最小单位字节(Byte):最常用的基本单位,一个字节有8位b7 b6 b5 b4 b3 b2 b1 b01 0 0 1 0 1 0 1 =27+24+22+20=149K字节1k=1024 byteM(兆)字节 1M=1024KG(吉)字节 1G=1024MT(太)字节 1T=1024G曾经听人说,一个c,c++大神,就靠输入,0和1就可以装好操作系统,不知道是不是真的,嘿嘿2.十进制转换1234[10进制] 0 1 2 3 4 5 6 7 8 9 0 当数位上的值超过9就要进11000+200+30+4=1*103+2*102+3*101+4*100=12341011[2进制] 0 1 当数位上的值超过1就要进11*23+0*22+1*21+1*20=8+0+2+1=111011[8进制]0 1 2 3 4 5 6 7 当数位上的值超过7就要进11*83+1*81+1*80=512+8+1=5211011[16进制]0 1 2 3 4 5 6 7 8 9 A B C D E F 当数位上的值超过15就要进1 1*163+1*161+1*160=4096+16+1=4113当然其他进制转换成10进制是最简单的了,我想聪明的你肯定会了。
3.二进制转换首先来看十进制到二进制:除2取余数最后把余数倒过来 100101比如:十进制数37所以转换成的二进制数字为:100101再来八进制到二进制:一个八进制的位拆分成一个三位的二进制数比如:[八进制]6166拆分成 1101拆分成0016拆分成110所以转换成的二进制数字为:110001110再来十六进制到二进制:一个八进制的位拆分成一个四位的二进制数比如:[十六进制]6166拆分成01101拆分成00016拆分成0110所以转换成的二进制数字为:110000101104.八进制转换十进制到八进制:除8取余数最后把余数倒过来同时我们也可以先将十进制转换成二进制,然后将二进制又转换成八进制比如:2456 转化成八进制数字:46302456/8=307,余0;307/8=38,余3;38/8=4,余6;4/8=0,余4。
二进制、八进制、十进制和十六进制关系为什么需要八进制和十六进制?由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。
但二进制数太长了。
面对太长的数进行思考或操作,没有人会喜欢。
用16进制或8进制可以解决这个问题。
因为,进制越大,数的表达长度也就越短。
不过,为什么偏偏是16或8进制,而不其它的,诸如9或20进制呢?因为2、8、16,分别是2的1次方、3次方、4次方。
这一点使得三种进制之间可以非常直接地互相转换。
8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。
假设有人问你,十进数1234为什么是一千二百三十四?你尽可以给他这么一个算式:1234=1*10+2*10+3*10+4*10假设有人问你,二进数10,0000为什么是十进制的32?你尽可以给他这么一个算式:可以看出,所有进制换算成10进制,关键在于三个因素:进制基数、权位和权值。
如何将二、八、十六进制数转换为十进制数。
(一)二进制数转换成十进制数由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,从最后一位开始算,依次列为第0、1、2...n位,第n位的数(0或1)乘以基数2的n次方,然后按十进制加法规则求和,得到的结果就是答案。
这种做法称为"按权相加"法。
例1:(01100100)2=(100)10计算过程:0*20+0*21+1*22+1*23+0*24+1*25+1*26+0*27=0乘以多少都是0,所以也可直接跳过值为0的位:1*22+1*23+1*25+1*26=100例2:(1011.01)2=(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10=(8+0+2+1+0+0.25)10=(11.25)10例3:(101.101)2=(5.625)10(二)8进制数转换为10进制数,也按"按权相加"法,只将基数换成8即可。
进制数总结1. 什么是进制数进制数是一种用于表示数值的方法,它由一定的基数和一系列的数字符号组成。
常见的进制数有十进制、二进制、八进制和十六进制。
•十进制:使用基数10,由0-9这10个数字组成。
•二进制:使用基数2,由0和1两个数字组成。
•八进制:使用基数8,由0-7这8个数字组成。
•十六进制:使用基数16,由0-9和A-F这16个字符组成。
2. 总结进制间的转换方法2.1. 二进制与十进制的转换将一个二进制数转换为十进制数,可以通过加权求和的方法实现。
首先,从二进制数的最右边(低位)开始,按权重依次将每个二进制位与2的幂次方相乘,再将所有结果相加即可得到十进制数。
例如,二进制数1011转换为十进制数的计算过程如下:1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 8 + 0 + 2 + 1 = 11将一个十进制数转换为二进制数,可以使用除2取余法。
将十进制数不断除以2,将余数从低位到高位排列,直到商为0为止。
例如,十进制数25转换为二进制数的计算过程如下:25 / 2 = 商12,余数112 / 2 = 商6,余数06 / 2 = 商3,余数03 / 2 = 商1,余数11 /2 = 商0,余数1所以,十进制数25转换为二进制数10101。
2.2. 十六进制与二进制的转换在计算机领域中,经常使用十六进制表示二进制数,这是因为一位十六进制数可以表示4位二进制数。
通过将每个二进制位组成4位的二进制数,然后将这个4位的二进制数转换为一个十六进制数可以实现十六进制与二进制之间的转换。
例如,二进制数1110可以转换为十六进制数的计算过程如下:1110 = 1110= (1 * 2^3) + (1 * 2^2) + (1 * 2^1) + (0 * 2^0)= 8 + 4 + 2 + 0= E2.3. 八进制与二进制的转换将一个八进制数转换为二进制数,可以将每个八进制数位转换为对应的3位二进制数。
二进制、八进制、十六进制相互转换
B→H 16进制就有16个数,0~15,用二进制表示15的方法就是1111,故16进制用2进制可以表现成0000~1111,也就是每四个为一位。
例:1、( 1 1 1 1 0 1)B=(3D)H 0 0 1 1| 1 1 0 1
2+1=3 8+4+1=13=D
2、(0001 0110.0101 1011)B=(16.5B)H
H→B 二进制每四位所表示的数的最大值对应16进制的15,即16进制每一位上最大值,故将16进制上每一位分别对应二进制上四位进行转换,即得所求:例:(2AF5)H=(0010101011110101)B 5 F A 2
0101 1111 1010 0010
B→O 以小数点为界分别向左右3数字为一组进行分组,每组分别转化成二进制数,最后合并在一起,并把首0去掉(尾0不可以去)。
例:(1101001)B=(151)O 001 101 001
1 5 1
O→B 八进制数一位一位地取出,然后把一位换算成 3位(0-000 1-001 2-010 3-011 4-100 5-101 6-110 7-111)依次排列就可以了。
例:(0371)O =(011 111 001)B 3 7 1
011 111 001
总结:B→H(O),把一个二制数以小数点为界分别向左右每4(或3)个数字为一组进行分组,每组分别转化成16或8进制数,最后合并在一起;H(O)→B,把一个16或8进制数以小数点为界分别向左右,每个数字分别转化成二进制数,最后合并在一起。
⼆进制、⼋进制、⼗进制、⼗六进制之间的转换⼆进制是Binary,简写为B⼋进制是Octal,简写为O⼗进制为Decimal,简写为D⼗六进制为Hexadecimal,简写为H⽅法为:⼗进制数除2取余法,即⼗进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为⽌。
读数要倒叙读。
⼩数:乘2取整法,即将⼩数部分乘以2,然后取整数部分,剩下的⼩数部分继续乘以2,然后取整数部分,剩下的⼩数部分⼜乘以2,⼀直取到⼩数部分为零。
如果永远不能为零,就同⼗进制数的四舍五⼊⼀样,按照要求保留多少位⼩数时,就根据后⾯⼀位是0还是1,取舍,如果是零,舍掉,如果是1,向⼊⼀位。
换句话说就是0舍1⼊。
读数要从前⾯的整数读到后⾯的整数,即读数要顺序读。
0.125 转⼆进制第⼀步,将0.125乘以2,得0.25,则整数部分为0,⼩数部分为0.25;第⼆步, 将⼩数部分0.25乘以2,得0.5,则整数部分为0,⼩数部分为0.5;第三步, 将⼩数部分0.5乘以2,得1.0,则整数部分为1,⼩数部分为0.0;第四步,读数,从第⼀位读起,读到最后⼀位,即为0.001。
积整数部分0.125 x 2 = 0.25 00.25 x 2 = 0.5 00.5 x 2 = 1.0 1150.125 转⼆进制10010110.0010.45 转⼆进制(保留到⼩数点第四位)第⼀步,将0.45乘以2,得0.9,则整数部分为0,⼩数部分为0.9;第⼆步, 将⼩数部分0.9乘以2,得1.8,则整数部分为1,⼩数部分为0.8;第三步, 将⼩数部分0.8乘以2,得1.6,则整数部分为1,⼩数部分为0.6;第四步, 将⼩数部分0.6乘以2,得1.2,则整数部分为1,⼩数部分为0.2; 算到这⼀步就可以了,因为只需要保留四位⼩数第五步, 将⼩数部分0.2乘以2,得0.4,则整数部分为0,⼩数部分为0.4;第六步, 将⼩数部分0.4乘以2,得0.8,则整数部分为0,⼩数部分为0.8;后⾯会⼀直循环重复第七步, 将⼩数部分0.8乘以2,得1.6,则整数部分为1,⼩数部分为0.6;。
进制详解:二进制、八进制和十六进制我们平时使用的数字都是由 0~9 共十个数字组成的,例如 1、9、10、297、952 等,一个数字最多能表示九,如果要表示十、十一、二十九、一百等,就需要多个数字组合起来。
例如表示 5+8 的结果,一个数字不够,只能”进位“,用 13 来表示;这时”进一位“相当于十,”进两位“相当于二十。
因为逢十进一(满十进一),也因为只有 0~9 共十个数字,所以叫做十进制(Decimalism)。
十进制是在人类社会发展过程中自然形成的,它符合人们的思维习惯,例如人类有十根手指,也有十根脚趾。
进制也就是进位制。
进行加法运算时逢X进一(满X进一),进行减法运算时借一当X,这就是X进制,这种进制也就包含X个数字,基数为X。
十进制有 0~9 共10个数字,基数为10,在加减法运算中,逢十进一,借一当十。
二进制我们不妨将思维拓展一下,既然可以用 0~9 共十个数字来表示数值,那么也可以用0、1两个数字来表示数值,这就是二进制(Binary)。
例如,数字0、1、10、111、100、1000001 都是有效的二进制。
在计算机内部,数据都是以二进制的形式存储的,二进制是学习编程必须掌握的基础。
本节我们先讲解二进制的概念,下节讲解数据在内存中的存储,让大家学以致用。
二进制加减法和十进制加减法的思想是类似的:•对于十进制,进行加法运算时逢十进一,进行减法运算时借一当十;•对于二进制,进行加法运算时逢二进一,进行减法运算时借一当二。
下面两张示意图详细演示了二进制加减法的运算过程。
1) 二进制加法:1+0=1、1+1=10、11+10=101、111+111=1110图1:二进制加法示意图2) 二进制减法:1-0=1、10-1=1、101-11=10、1100-111=101图2:二进制减法示意图八进制除了二进制,C语言还会使用到八进制。
八进制有 0~7 共8个数字,基数为8,加法运算时逢八进一,减法运算时借一当八。
二进制、八进制、十六进制6.6通过调试查看变量的值下面我们来动手完成一个小小的实验,通过调试,观察变量的值。
我们在代码中声明两个int变量,并分别初始化为5和-5。
然后我们通过CB提供的调试手段,可以查看到程序运行时,这两个变量的十进制值和十六进制值。
首先新建一个控制台工程。
加入以下黑体部分(就一行)://---------------------------------------------------------------------------#pragmahdrstop//---------------------------------------------------------------------------#pragmaargsusedintmain(intargc,char*argv[]){intaaaa=5,bbbbb=-5;return0;}//---------------------------------------------------------------------------没有我们熟悉的的那一行:getchar();所以,如果全速运行这个程序,将只是DOS窗口一闪而过。
不过今天我们将通过设置断点,来使用程序在我们需要的地儿停下来。
设置断点:最常用的调试方法之一,使用程序在运行时,暂停在某一代码位置,在CB里,设置断点的方法是在某一行代码上按F5或在行首栏内单击鼠标。
如下图:在上图中,我们在return0;这一行上设置断点。
断点所在行将被CB以红色显示。
接着,运行程序(F9),程序将在断点处停下来。
(请注意两张图的不同,前面的图是运行之前,后面这张是运行中,左边的箭头表示运行运行到哪一行)当程序停在断点的时,我们可以观察当前代码片段内,可见的变量。
观察变量的方法很多种,这里我们学习使用DebugInspector(调试期检视),来全面观察一个变量。
以下是调出观察某一变量的DebugInspector窗口的方法:先确保代码窗口是活动窗口。
(用鼠标点一下代码窗口)按下Ctrl键,然后将鼠标挪到变量aaaa上面,你会发现代码中的aaaa变蓝,并且出现下划线,效果如网页中的超链接,而鼠标也变成了小手状点击鼠标,将出现变量aaaa的检视窗口:笔者使用的操作系统为WindowsXP,窗口的外观与Win9X有所不同)从该窗口,我可以看到:aaaa:变量名int:变量的数据类型0012FF88:变量的内存地址,请参看5.2变量与内存地址;地址总是使用十六进制表达5:这是变量的值,即aaaa=5;0xXX:同样是变量的值,但采用16进制表示。
因为是int类型,所以占用4字节。
首先先关闭前面的用于观察变量aaaa的DebugInspector窗口。
现在,我们用同样的方法来观察变量bbbb,它的值为-5,负数在计算机中使用补码表示。
正如我们所想,-5的补码为:0xFFFFFFFB。
再按一次F9,程序将从断点继续运行,然后结束。
6.2二、八、十六进制数转换到十进制数6.2.1二进制数转换为十进制数二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……所以,设有一个二进制数:XX,转换为10进制为:下面是竖式:XX换算成十进制第0位0*20=0第1位0*21=0第2位1*22=4第3位0*23=0第4位0*24=0第5位1*25=32第6位1*26=64第7位0*27=0+用横式计算为:0*20+0*21+1*22+1*23+0*24+1*25+1*26+0*27=1000乘以多少都是0,所以我们也可以直接跳过值为0的位:1*22+1*23+1*25+1*26=1006.2.2八进制数转换为十进制数八进制就是逢8进1。
八进制数采用0~7这八数来表达一个数。
八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……所以,设有一个八进制数:1507,转换为十进制为:用竖式表示:507换算成十进制。
第0位7*80=7第1位0*81=0第2位5*82=320第3位1*83=512+同样,我们也可以用横式直接计算:7*80+0*81+5*82+1*83=839结果是,八进制数1507转换成十进制数为8396.2.5十六进制数转换成十进制数2进制,用两个阿拉伯数字:0、1;8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;10进制,用十个阿拉伯数字:0到9;16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊?16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。
字母不区分大小写。
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……所以,在第N(N从0开始)位上,如果是是数X(X大于等于0,并且X小于等于15,即:F)表示的大小为X*16的N次方。
假设有一个十六进数2AF5,那么如何换算成10进制呢?用竖式计算:2AF5换算成10进制:第0位:5*160=5第1位:F*161=240第2位:A*162=2560第3位:2*163=8192+直接计算就是:5*160+F*161+A*162+2*163=10997(别忘了,在上面的计算中,A表示10,而F表示15)现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。
假设有人问你,十进数1234为什么是一千二百三十四?你尽可以给他这么一个算式:1234=1*103+2*102+3*101+4*1006.2.6十六进制数的表达方法如果不使用特殊的书写形式,16进制数也会和10进制相混。
随便一个数:9876,就看不出它是16进制或10进制。
C,C++规定,16进制数必须以0x开头。
比如0x1表示一个16进制数。
而1则表示一个十进制。
另外如:0xff,0xFF,0X102A,等等。
其中的x也也不区分大小写。
(注意:0x中的0是数字0,而不是字母O)以下是一些用法示例:inta=0x100F;intb=0x70+a;至此,我们学完了所有进制:10进制,8进制,16进制数的表达方式。
最后一点很重要,C/C++中,10进制数有正负之分,比如12表示正12,而-12表示负12,;但8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2,C,C++并不把它当成一个负数。
6.2.7十六进制数在转义符中的使用转义符也可以接一个16进制数来表示一个字符。
如在6.2.4小节中说的’?’字符,可以有以下表达方式:’?’//直接输入字符’77’//用八进制,此时可以省略开头的0’x3F’//用十六进制同样,这一小节只用于了解。
除了空字符用八进制数’’表示以外,我们很少用后两种方法表示一个字符。
6.3十进制数转换到二、八、十六进制数6.3.110进制数转换为2进制数给你一个十进制,比如:6,如果将它转换成二进制数呢?10进制数转换成二进制数,这是一个连续除2的过程:把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0。
最后将所有余数倒序排列,得到数就是转换结果。
听起来有些糊涂?我们结合例子来说明。
比如要转换6为二进制数。
“把要转换的数,除以2,得到商和余数”。
那么:要转换的数是6,6÷2,得到商是3,余数是0。
(不要告诉我你不会计算6÷3!)“将商继续除以2,直到商为0……”现在商是3,还不是0,所以继续除以2。
那就:3÷2,得到商是1,余数是1。
“将商继续除以2,直到商为0……”现在商是1,还不是0,所以继续除以2。
那就:1÷2,得到商是0,余数是1(拿笔纸算一下,1÷2是不是商0余1!)“将商继续除以2,直到商为0……最后将所有余数倒序排列”好极!现在商已经是0。
我们三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110了!6转换成二进制,结果是110。
把上面的一段改成用表格来表示,则为:被除数计算过程商余数66/23033/21111/201(在计算机中,÷用/来表示)6.4二、十六进制数互相转换二进制和十六进制的互相转换比较重要。
不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。
我们也一样,只要学完这一小节,就能做到。
首先我们来看一个二进制数:1111,它是多少呢?你可能还要这样计算:1*20+1*21+1*22+1*23=1*1+1*2+1*4+1*8=15。
然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。
即,位的权值为23=8,然后依次是22=4,21=2,20=1。
记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。
下面列出四位二进制数xxxx所有可能的值(中间略过部分)仅4位的2进制数快速计算方法十进制值十六进值1111=8+4+2+1=15F1110=8+4+2+0=14E1101=8+4+0+1=13D1100=8+4+0+0=12C1011=8+4+0+1=11B1010=8+0+2+0=10A1001=8+0+0+1=109....0001=0+0+0+1=110000=0+0+0+0=00二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。
如(上行为二制数,下面为对应的十六进制):XX,XX,XXFD,A5,9B反过来,当我们看到FD时,如何迅速将它转换为二进制数呢?先转换F:看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?应该是8+4+2+1,所以四位全为1:1111。
接着转换D:看到D,知道它是13,13如何用8421凑呢?应该是:8+2+1,即:1011。
所以,FD转换为二进制数,为:XX由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。
比如,十进制数1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。
所以我们可以先除以16,得到16进制数:被除数计算过程商余数XX/XX7/16413(D)44/1604结果16进制为:0x4D2然后我们可直接写出0x4D2的二进制形式:XX0010。
其中对映关系为:0100--41011--D0010--2同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。