Java编程那些事儿7——进制的观念
副标题#e#
1.2进制的观念
因为不行能为每个数值都缔造一个标记,所以需要用根基数字组合出复合的数值,这样就有了进制的观念。
其实所有进制都是工钱的缔造,都是用来计数利便的。此刻最常用的进制是十进制,虽然其它的进制也在利用中。譬喻“旗鼓相当”这个成语,就反应了古代一斤便是十六两的观念,也就是十六进制计数方法。
计较机编程中常用的进制有二进制、八进制、十进制和十六进制,十进制照旧最主要的表达形式。在编程中,各人书写的数值默认为十进制。
对付进制,有两个最根基的观念:基数和运算法则。
l基数
基数指一种进制中构成的根基数字,也就是不能再拆分的数字。譬喻十进制是0-9,二进制是0和1,八进制是0-7,十六进制是0-9,A-F(巨细写均可)。可能可以简朴的这样影象,假设是n进制的话,基数就是[0,n-1]的数字,基数的个数和进制值沟通,十进制有十个基数,依次类推。
l运算法则
运算法则就是进位或借位法则,这个雷同于一般计较机书籍中位权的观念,譬喻对付十进制来说,该法则是“满十进一,借一当十”,也就是低位的数字满十了向高位进一,从高位借到的一,相当于低位上的十。其它的进制也是这样,对付二进制来说,就是“满二进一,借一当二”,八进制和十六进制也是这样。
在数学上暗示一个数字是几进制,凡是利用如下名目:[数值]进制数,譬喻[10]2 暗示二进制数值10。
1.2.1 二进制
二进制是计较机内部数据暗示的形式,所以进修计较机编程必需熟悉二进制。熟悉二进制有以下几个用途:
l更容易领略计较机的数据存储方法
计较机内部的许多转换,譬喻数据范例之间的强转,都可以用二进制表明最终的功效的值。
l二进制的运算速度高
二进制的运算速度比十进制高的多。譬喻求2的n次方,通过移位实现的效率比数学要领高效。
l利用二进制数值举办数据存储
以二进制的形式存储数值,一个是较量节省资源,可以利用二进制的位来存储信息,譬喻常见的硬件节制信息,都是二进制的形式举办提供的。
如前所述,二进制包括0和1两个基数,运算法则是“满二进一,借一当二”,下面简朴的先容一下二进制的计数方法。
譬喻十进制的0-9用二进制举办表达,则依次是:
0,1,10,11,100,101,110,111,1000,1001
说明:数值之间利用逗号举办隔断。
#p#副标题#e#
下面是二进制的一些根基运算功效:
l加法运算
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
l减法
0 – 0 = 0
0 – 1 = -1
1 – 0 = 1
1 – 1 = 0
l乘法
0 × 0 = 0
0 × 1 = 0
1 × 0 = 0
1 × 1 = 1
l除法
0 / 0 无意义
0 / 1 = 0
1 / 0 无意义
1 / 1 = 1
以下是一些切合的表达式:
110 + 111 = 1101
这些根基的运算布局在实际开拓中一般不会直接用到,可是通过这些内容可以加深对付二进制观念的领略。
1.2.2 二进制和十进制之间的转换
由于计较机内部的数据是以二进制举办表达的,而十进制又是日常糊口中最常用的进制,所以它们之间常常需要举办转换。下面先容一下转换的方法。
1.2.2.1 十进制转换为二进制
十进制整数转换为二进制有三种要领,别离是除二取余、计较器转换和履历法。十进制小数的转换要领最后做简朴的先容。
1.除二取余法
除二取余法是转换时的最根基要领,也是最通用的要领。法则为:利用十进制和2去除,取每次获得的商和余数,用商继承和2相除,直到商为零为止,第一次获得的余数作为二进制的低位,最后一次获得的余数作为二进制的高位,由余数构成的数字就是转换后二进制的值。譬喻十进制的13转换为二进制的计较步调如下:
商 余数
13/2=6 1
6 /2=3 0
3 /2=1 1
1 /2=0 1
则计较的最终功效就是1101。
2.计较器转换
Windows操纵系统中的计较器也可以很利便的实现进制之间的转换。在措施菜单中附件子菜单中打开计较器,从打开的计较器的查察菜单中,选择“科学型”,输入你要转换的十进制的数字,譬喻13,然后界面上数字显示框西侧的“二进制“,则转换后的数值就直接显示在计较器中。
3.履历法
#p#分页标题#e#
对付二进制熟悉今后,那么计较十进制对应的数字可以通过一些根基的数学调动来实现,在利用履历法以前,必需熟记2的0-10次方对应的十进制的值,依次是:
1,2,4,8,16,32,64,128,256,512,1024
则转换一些非凡的数字时可以极大的提高转换速度,譬喻数字65,则可以这样转换:
65 = 64 + 1
64对应的二进制形式为1000000
1对应的二进制形式为1
则65的二进制形式为1000001
这个只适合转换一些非凡的数字,适应性没有除二取余法遍及。
十进制小数的转换回收的一般要领是乘二取整法,法则为:对付小数部门先乘二,然后得到运算功效的整数部门,然后将功效中的小数部门再次乘二,直到小数部门为零为止,则把第一次获得的整数部门作为二进制小数的高位,后续的整数部门作为职位就是转换后获得的二进制小数。需要说明的是,有些十进制小数无法精确的用二进制举办表达,所以转换时切合必然的精度即可,这也是为什么计较机的浮点数运算禁绝确的原因。
譬喻0.25转换为二进制小数的步调如下:
整数部门
0.25 × 2 = 0.5 0
0.5× 2 = 1.0 1
则0.25转换为二进制小数为0.01
假如一个十进制数字既有整数部门,也有小数部门,则分隔举办转换即可。
1.2.2.2 二进制转换为十进制
二进制转换为十进制回收的要领是:数字乘位权相加法。下面先以十进制为例来说明该要领,譬喻十进制数字345的值,5的位权是1,4的位权是10,3的位权是100,则有如下表达式创立:345=5 × 1 + 4 × 10 + 3 × 100,这就是数字乘位权相加法的道理。
其实对付十进制整数的位权很有法则,从右向左第n位的位权是十的(n-1)方,譬喻个位是10(1-1),十位是10(2-1),依次类推。那么二进制整数的位权纪律和这个一致,也就是从右向左第n位的位权是二的(n-1)方。
譬喻二进制整数1011转换为十进制的表达式为:
[1011]2 = 1 × 20 + 1 × 21 + 0 × 22 + 1 × 23 = 1 + 2 + 0 + 8=11
而对付二进制的小数,也是回收一样的要领,只是二进制小数的位权法则为,小数点后第一位小数的位权是2的-1次方,第二位是2的-2次方,依次类推。
譬喻二进制小数0.1101转换为十进制小数的表达式为
[0.1101]2=1 ×2-1 + 1 ×2-2 + 0 × 2-3 + 1 × 2-4 = 0.5 + 0.25 + 0 + 0.0625=0.8125
同理,假如二进制包括整数和小数部门,则分隔举办转换即可。
1.2.3 二进制和八进制、十六进制之间的转换
固然二进制是计较机内部的数据表达形式,可是由于二进制基数太少,则导致数字较量长,为了简化数字的书写,就建设了八进制和十六进制。八进制和十六进制就是对二进制的简化,所以二进制到八进制和十六进制的转换很是简朴。
二进制整数转换为八进制的要领是“三位一并“,也就是从右侧开始,每3位二进制数字转换为八进制的一位,依次类推,因为二进制的三位数字可以表达的区间是000-111,恰好和0-7重合。譬喻:
二进制的10111转换为8进制为:最后三位111转换为7,前面的数字10转换为2,则转换后获得的八进制数字为27。
二进制整数转换为十六进制的要领是“四位一并“,譬喻10111转换为十六进制是0111转换为7,1转换为1,则转换后获得的十六进制数字是17。
二进制小数转换为八进制的要领也是“三位一并“,只是转换时从小数的高位开始,也就是小数的左侧开始。譬喻0.10111转换为八进制是101转换为5,110转换为6,则转换获得的八进制小数为0.56。需要出格留意的是,小数最后假如不敷三位,必然要在后续补零今后再举办转换。
二进制小数转换为十六进制的要领也是“四位一并”,只是转换时从小数的高位开始。譬喻二进制小数0.10111转换为十六进制小数为,1011转换为b,1000转换为8,则转换后获得的十六进制是0.b8。
假如二进制数包括整数和小数部门,则分隔举办转换。
文章来历:http://blog.csdn.net/Mailbomb/archive/2008/04/08/2259733.aspx