二进制的运算
首先讲到的是十进制转化为二进制,因为以人类的思维观是十进制的。生活中,十进制的计数值早已经习惯了我们的生活,但在计算机领域,十进制是行不通的,在早期的晶体管中,只有高低电平两种状态之分。认为为了直观的计数,将高低电平赋予了其数值的含义,即高为“1”,低为“0”。便于人类以数字形式的理解。进而演化出了二进制运算。
那么怎样才能将十进制转换为二进制呐!人们依据十进制的思路,对其做了逆向运算,即按位做除法,取余数作为二进制数据位的组成,对于十进制数的小数部分则做乘法运算。
for example:十进制数:16.34375,转换为二进制数:
16/2=8余0;8/2=4余0;4/2=2余0;2/2=1余0;1/2=0余1;即整数部位的二进制组成为:10000(整数位的组成从后往前计数)
0.34375x2=0.6875个位为0,;0.6875x2=1.375个位为1;0.375x2=0.75个位为0;0.75x2=1.5个位为1,0.5x2=1个位为1。即小数部分的二进制组成为:01011(小数位的组成从前往后计数)
在计算机语言中,除了二进制外,人们为了在某些大容量的数据运算,抛开了冗繁的二进制计数,开始了八进制和十六计算值,那么又涉及到了运算位的转化。其实无论是从二进制转化为八进制或者是十六进制在原理上都是大同小异的。下面就来讲讲其转换的规律。
二进制转换为八进制:
仍然以16.34375为例进行讲解。
先从整数部分开始分解:16=10000=010_000=20;
小数部分的分解:0.34375=01011=010_110=26;
那么十进制数16.34375转化为八进制的数为20.26
总结:对于二进制数转化为八进制的规律,整数部分,从右到左每三位一组,不足3位的高位补0,小数部位,从左到右每3位为一组,不足三位低位补0。
二进制转换为八进制的方法介绍完后,接下来讲解二进制转换为十六进制。
先从整数部分开始分解:16=10000=0001_0000=10;
小数部位的分解为:0.34375=01011=0101_1000=58;
那么十进制数16.34375转化为十六进制数为10.58
对于上面的各个进制之间的转换介绍完后,接下来介绍一下进制之间的运算,在人类的思维里,早已经习惯了十进制的加减乘除,同理,二进制的加减乘除与十进制的思维方式也是一样。
譬如:十进制运算:3+2=5;
二进制运算:0011+0010=0101;
0011
+ 0010
-------------
0101
雷同于十进制的算法,只不过是数据位满2往前进一。
对于以上进制的转换讲解完全后,下面来讲一下,二进制中所涉及到的原码,补码,反码之间的关系。
何为数据原码,原码即在数据位的基础上加上了符号为而已,在计算机领域“+”的符号位为0,“-”的符号位为1,
0000 0 0 0000
1001 -1 1 0001
1010 -2 2 0010
1011 -3 3 0011
1100 -4 4 0100
1101 -5 5 0101
1110 -6 6 0110
1111 -7 7 0111
其数值的所在范围为(-2^3-1到2^3-1)
数据的反码就是在原码的基础上,做了一定的改变而已,符号位不变,数据位取反。
0000 0 0 0000
1110 -1 1 0001
1101 -2 2 0010
1100 -3 3 0011
1011 -4 4 0100
1010 -5 5 0101
1001 -6 6 0110
1000 -7 7 0111
反码在做数据加减运算时,会出错,所以在计算机运算中都不会采用。
接下来讲一下补码的构成,以及其运算过程。
何为补码?
正数与原码一样,数据位在反码的基础上加1
0 0000
1111 -1 1 0001
1110 -2 2 0010
1101 -3 3 0011
1100 -4 4 0100
1011 -5 5 0101
1010 -6 6 0110
1001 -7 7 0111
1000 -8
用补码进行加减运算:
1-2=0001+1110=1111=-1
1-1=0001+1111=0000=0
总结:补码在做符号的加减运算时没有任何问题。