二进制在编程中的地位举足轻重,这个名词听上去高深莫测,下面来揭开它神秘的面纱。
我们平时计数都是以10为进制,我们平时数数:1、2、3、4、5、6、7、8、9,数到10时导致个位变成0,十位变成了1,因为9+1要向十位进一,十进制意味着数字的每一位最小为0,最大为9。同理,二进制意味着数字的每一位最小为0,最大为1,十进制的2在二进制如何表示呢?1+1意味着要进一位,对于二进制来说,1+1=10,注意!这里的10不是十进制的十。二进制的减法原理和十进制的减法一样,10-1=1,因为0减1,必须借一位才能够完成这个运算。
二进制里有个位、十位的概念吗?没有。
在解释这个问题前先介绍几个公式,计算机内有一些相应的单位去计量容量,这些单位跟程序员相关的的主要有:
1字节=8位
1字=16位
双字=32位=2字
如何称呼二进制中的位呢?比如10001100是一个总共有8位的数,也称为一个字节,10001100这个字节最左边的1称为字节的最高位,最右边的0称为字节的最低位。从最高位向最低位的方向到第几位就称为高几位,如1000称为这个字节的高4位,100称为这个字节的高3位;从最低位向最高位的方向数起到第几位就称为低几位,如:1100称为这个字节的低4位,100称为这个字节的低3位。
一个字节从最低位往最高位的方向依次称为第0位(注意不是第1位)、第1位、第2位直到第7位(注意不是第8位),如10001100的第0位是0,第2位是1,第3位是1,这个称呼对于一个字、一个双字以及更大的计量单位都是一样的。
下面我们把二进制10001100转化为十进制,以加深大家对二进制的认识:(^表示乘幂,2^3表示3个2相乘,2^4表示4个2相乘,以些类推,2^n表示n个2相乘;*表示乘号;n^m的意义亦可视为1×n×n×n...︰起始值1(乘法的单位元)乘底m这么多次。除了0之外所有数的零次方都是1,即n^0=1;幂的指数是负数时,等于1/n^m。)
计算过程很简单:1*(2^7)+0*(2^6)+0*(2^5)+0*(2^4)+1*(2^3)+1*(2^2)+)+0*(2^1))+0*(2^0)=128+0+0+0+8+4+0+0=140。
这个公式为什么能把二进制计算成十进制呢,先看看十进制是如何成为人们心目中的数字的。
1206=1*(10^3)+2*(10^2)+0*(10^1)+6*(10^0)
=1000+200+0+6=1206
这个相信大家都能理解,因为十进制是以10为进制的,所以十位是多少就表示这个数中含多少个10,百位是多少表示这个数中含多少个100.比如一个十进制有3位,那么该数=百位*(10^2)+十位*(10^1)+个位*(10^0);如果一个十进制有n位,那么该数=第n-1位值*(10^(n-1))+第n-2位值*(10^(n-2))+......+第1位值*(10^1)+第0位值*(10^0)。
因为二进制是以2为进制的,理所当然,所以对于一个n位的二进制来说,转化成十进制的方式是:第n-1位值*(2^(n-1))+第n-2位值*(2^(n-2))+......+第1位值*(2^1)+第0位值*(2^0)。
通常我们在编程时使用十六进制来表示二进制,而不直接使用二进制,十六进制数的10-15如何表示呢?它们分别表示为A、B、C、D、E、F。在C语言中,可以使用0X,后跟十六进制的方式来描述一个二进制数,比如0x02表示二进制中的10,二进制如何转换成十六进制呢?
比较实用的方法是将二进制以4位为一组,每4位转化为一个十六进制数字。
以10001100为例,将它分为高4位1000和低4位1100,分别按照按照前面所说的方法转化成十进制,高4位1000:1*2^3=8;低4位1100转化成十进制:1*2^3+1*2^2=12。
8表示为十六进制仍然是8,而12表示为十六进制是C,所以10001100用十六进制表示是8C,C语言描述是0X8C。
==============================================
小技巧集锦:
1、可以先把一个8位的二进制数11111111事先转化十进制数,并记住,下次转化时非常方便,第7位转化为10进制是128,第6位转化后是64,第5位转化后是32,第4位转化后是16,第3位转化后是8,第2位转化后是4,第1位转化后是2,第0位转化后是1,转化时把所有值为1的位的转化后十进制数相加即可。二进制1100转化成十进的过程:8+4=12
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。