Java开发笔记(六)特殊数字的表达

以前的文章提到,Java语言不但支持大众熟知的十进制数,也支持计算机特有的二进制数、八进制数和十六进制数。但是在给数值变量赋值的时候,等号右边的数字明显属于十进制,那究竟要如何书写其它进制的数字呢?为此Java规定了几种数字前缀,以这些前缀开头的数字就表示特定进制的数值,二进制、八进制和十六进制及其对应的前缀说明以下:
一、二进制,该进制的数值以0b或者0B开头,其后的数字只能是0和1。注意b是binary(二进制)的首字母。
二、八进制,该进制的数值以0开头,其后的数字只能是0到7。
三、十六进制,该进制的数值以0x或者0X开头,其后的数字除了0到9以外,还包括字母a到f(不区分大小写)。注意x表明hexadecimal(十六进制)。
下面是声明各类进制变量的代码例子,依次演示了二进制数、八进制数、十六进制数和十进制数的赋值操做:java

public class Prefix {
	
	public static void main(String[] args) {
		int binary = 0b11; // 二进制数,0b也能够写成0B
		System.out.println("binary="+binary);
		int octonary = 011; // 以0开头,后面非bB非xX的就是八进制数
		System.out.println("octonary="+octonary);
		int hexadecimal = 0x11; // 十六进制数,0x也能够写成0X
		System.out.println("hexadecimal="+hexadecimal);
		int hexLetter = 0xff; // 十六进制数不区分大小写,如ff也能够写成FF
		System.out.println("hexadecimal="+hexLetter);
		int decimal = 11; // 没有任何前缀,则默认为十进制数
		System.out.println("decimal="+decimal);
	}
}

 

运行上述代码,在Console窗口的观察结果以下图所示。可见二进制的0b11转成十进制数为3,八进制的011转成十进数为8,十六进制的0x11转成十进数为17,十六进制的0xff转成十进数为255。程序员

因为int类型最大只能表示21亿4千多万的整数,所以再大的整数就要使用long长整型变量了。例如截止2018年元旦,世界总人口达到74亿4444万3881,使用long变量保存世界人口的话,赋值代码本应以下所示:编程

		long worldPopulation = 7444443881; // 这样写会报错,由于整数默认是int类型

 

谁料Eclipse竟然报错,提示“The literal 7444443881 of type int is out of ”,意思是该数字超出了int类型的表示范围。原来Java里面的整数默认是整型,只分配四个字节的临时空间,然而7444443881超出了整型数的范围,导致默认的存储空间不够用了。要想扩大临时的存储空间,得在数字后面补上l或者L,表示该整数要求分配八个字节的长整型临时空间,这样才供得起7444443881这个大神。因而修改后的长整型赋值代码以下所示:测试

		// 截至2018年元旦,世界人口大约有74亿
		long worldPopulation = 7444443881L; // 长整型数要在数值末尾加上l或者L
		System.out.println("worldPopulation="+worldPopulation);

 

注意上面代码末尾的L只表示数据类型,变量值并不包括“L”这个字母,运行测试代码可见日志打印结果为“worldPopulation=7444443881”。
刚提到Java的整数默认是整型,相对应的,Java的小数默认是双精度型,那么试试下面的代码可否将小数赋值给float变量?ui

		float huilv = 3.14; // 这样写会报错,由于小数默认是double类型

 

果真Eclipse也提示出错了,正确的写法要在小数末尾补上f或者F,表示该小数按照浮点数型分配存储空间。改写后的浮点数赋值代码以下所示:日志

		// 3.14是中国古代数学家刘徽求得的圆周率数值,又称徽率
		float huilv = 3.14F; // 浮点数要在数值末尾加上f或者F
		System.out.println("huilv="+huilv);

 

其实小数后面也能够补上d或者D,表示该小数按照双精度型分配存储空间,只是由于Java的小数默认就是double类型,因此小数后面的D可加可不加,不影响正常的编译。blog

这下几种数字类型都可以正确地赋值了,可是还有个细节问题,当数字的位数不少的时候,后面有多少个零会让初学者看得眼花缭乱。现实生活中,整数一般每隔四位就在中间补上空格或者补上逗号,譬如说中国的领土面积是960万平方千米,实际书写通常为“960 0000”或者“960,0000”,这样能够很清楚地区分万的单位乃至亿的单位。在Java编程中,从Java7开始,容许在数字中间插入下划线做为分隔符,下划线自己没有保存到变量中,它的做用相似前面的空格和逗号,仅仅是方便程序员数清具体的位数罢了。下面是在数字变量赋值时添加下划线的代码例子:ip

		// 中国的领土面积是960万平方公里
		int chinaArea = 960_0000; // 从Java7开始,数字中间容许添加下划线,从而能够更方便地区分位数
		System.out.println("chinaArea="+chinaArea);

 

虽然下划线方便了程序员数数,数字的长度却变得更长了,假若再来一个更大的整数,例如太阳到地球的距离为1.5亿千米,展开但是150000000公里,Java赋值加了下划线则为“1_5000_0000”,此时后面拖了许多个零。在数学上,能够经过科学记数法表示这种较大的数,也就是把一个数书写成a与10的n次幂相乘的形式。Java代码也有与科学记数法相似的表达方式,像1.5亿这个数字,其实等于1.5乘以10的8次方,在代码中能够经过“E8”或者“e8”表示10的8次方,因而采起科学记数法的Java赋值代码举例以下:ci

		// 太阳距离地球1.5亿公里
		double sunDistance = 1.5E8; // E8表示乘以10的8次方,E是exponent(指数)的首字母
		System.out.println("sunDistance="+sunDistance);

 

注意上述代码中的1.5是小数,因此必须使用双精度数做为赋值变量,而不能用整形或长整型数。即便E前面的数字是整数,该变量也只能是双精度类型,由于Java约定了科学记数法专用于双精度数字。数学

相关文章
相关标签/搜索