整数时十进制二进制相互转换
二进制的1101转化成十进制
1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13
转化成十进制要从右到左用二进制的每个数去乘以2的相应次方,不过次方要从0开始。相反,用十进制的13除以2,每除一下将余数就记在旁边,最后按余数从下向上排列就可得到1101。由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为“按权相加”法。
2的0次方是1
2的1次方是2
2的2次方是4
2的3次方是8
2的4次方是16
2的5次方是32
2的6次方是64
2的7次方是128
2的8次方是256
2的9次方是512
2的10次方是1024
2的11次方是2048
2的12次方是4096
2的13次方是8192
2的14次方是16384
2的15次方是32768
有小数点的十进制与二进制之间的转换:
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。例如19.95 转2进制分为两个步骤:
(1) 小数点前:
19/2=9余1
9/2=4 余1
4/2=2 余0
2/2=1 余0
1/2=0 余1
由下往上取余数10011
(2) 小数点后
0.95*2  = 1.9 取整1
(1.9-1)*2  = 1.8 取整1
(1.8-1)*2  = 1.6 取整1
(1.6-1)*2  = 1.2 取整1
(1.2-1)*2  = 0.4 取整0
(0.4-0)*2  = 0.8 取整0
(0.8-0)*2  = 1.6 取整1
(1.6-1)*2  = 1.2 取整1
假设小数精度为8位,从上往下去则小数点后为0.11110011
故19.95 转化为二进制为10011.11110011
整数时八进制数转换为十进制数:
八进制就是逢8进1。
八进制数采用0~7这八数来表达一个数。
八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方,以此类推。
所以,设有一个八进制数:1507,转换为十进制为:
用竖式表示:
1507换算成十进制。
第0位7 * 80 = 7
第1位0 * 81 = 0
第2位5 * 82 = 320
第3位1 * 83 = 512
相加即为839。
同样,我们也可以用横式直接计算:
7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839
结果是,八进制数1507 转换成十进制数为839
整数时十六进制数转换成十进制数:
2进制,用两个阿拉伯数字:0、1;
8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;
10进制,用十个阿拉伯数字:0到9;
16进制,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进制呢?pdf转html
用竖式计算:
2AF5换算成10进制:
第0位:  5 * 160 = 5
第1位:  F * 161 = 240
第2位:  A * 162 = 2560
第3位:  2 * 163 = 8192
相加即为10997
直接计算就是5 * 160+ F * 161 + A * 162 +2 * 163 = 10997
现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。
十六进制数的表达方法:
如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。C,C++规定,16进制数必须以0x开头。比如0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不区分大小写。(注意:0x中的0是数字0,而不是字母O)
以下是一些用法示例
int a = 0x100F;
int b = 0x70 + a;
至此,我们学完了所有进制:10进制,8进制,16进制数的表达方式。最后一点很重要,C/C++中,10进制数有正负之分,比如12表示正12,而-12表示负12,;但8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2, C和C++并不把它当成一个负数。
10进制数转换成8进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成8。
十六进制数与二进制的相互转换:
二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个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进制值。
二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。
如(上行为二制数,下面为对应的十六进制):