Day8-27.Literals

来源:互联网 发布:intouch软件下载 编辑:程序博客网 时间:2024/06/06 23:57

直接常量


一般来说,如果在程序里使用了“直接常量”,编译器可以准确的直到要生成什么样的类型,但有时候确实模棱两可的。如果发生这种情况,必须对编译器加以适当的“指导”,用与直接量相关的某些字符来额外增加一些信息。下面这段代码向大家展示了这些字符。


//:operators/Literals.javaimport static net.mindview.util.Print.*;public class Literals{public static void main(String [] args){int i1=0x2f;//Hexadecimal (lowercase)print(“i1:” +Integer.toBinaryString(i1));//101111int i2=0X2F;//Hexadecimal (uppercase)print(“i2:” +Integer.toBinaryString(i2));//101111int i3=0177;//Octal (leading zero)print(“i3:” +Integer.toBinaryString(i3));//1111111char c=0xffff;//max char hex valueprint(“c:” +Integer.toBinaryString(c));//111111111111111byte b=0x7f;print(“b:” +Integer.toBinaryString(b));//1111111short s=0x7fff;// max short hex value print(“s:” +Integer.toBinaryString(s));//11111111111111long n1=200L;// long suffixlong n2=200l;//long suffix (but can be confusing )long n3=200;float f1=1;float f2=1F;//float suffixfloat f3=1f;//float suffixdouble d1=1d;//double suffixdouble d2=1D;//double suffix//(Hex and Octal also work with long )}}///:~


直接常量后面的后缀字符标志了它的类型。

若为大写(或小写)的L,代表long(但是,使用小写字母l容易造成混淆,因为它看起来很像数字1)。

大写(或小写)字母F.代表float;大写或小写字母D,则代表double。


十六进制数适用于所有整数数据类型,以前缀0x或0X,后面跟随0-9或小写(或大写)的a-f来表示。

如果试图将一个变量初始化成超出自身表示范围的值(无论这个值得数值形式如何),编译器都会向我们报告一条错误信息。

注意在前面的代码中,已经给出了char.byte以及short所能表示的最大的十六进制值。

如果超出范围,编译器会将值自动转化为int型,并告诉我们需要对这次赋值进行“窄化转型”。

这样我们就可清楚地知道自己的操作是否越界了。

八进制数由前缀0以及后续的0~7的数字来表示。

在C、C++或者Java中,二进制数没有直接常量表示方法。

但是,在使用十六进制和八进制计数法时,以二进制形式显示结果将非常有用。

通过使用Integer和Long类的静态方法toBinaryString()可以很容易的实现这一点。

请注意,如果将比较小的类型传递给Integer.toBinaryString()方法,则该类型将自动被转换为int。


指数记数法

Java采用了一种很不直观的记数法来表示指数,例如:

//:operators/Exponents.java//“e”means”10 to the power.”public class Exponents{public static void main(String [] args){//Uppercase and lowercase ‘e’ are the same:float expFloat=1.39e-43f;expFloat=1.39E-43f;System.out.println(expFloat);//1.39E-43double expDouble=47e47d;//’d’ is optionaldouble expDouble2=47e47;//Automatically doubleSystem.out.println(expDouble);//4.7E48}}///:~


在科学与工程领域,“e”代表自然对数的基数,约等于2.718(Java中的Math.E给出了更精确的double型的值)。

例如1.39*e^-43这样的指数表达式意味着1.39*2.718^-43。

然而,设计FORTRAN语言的时候,设计师们很自然地决定e代表“10的幂次”.

这种做法很奇怪,因为FORTRAN最初是面向科学与工程设计领域的,它的设计者们对引入这样容易令人混淆的概念应该很敏感才对。

但不管怎样,这种惯例在C、C++以及JAVA中被保留下来。

所以倘若习惯将e作为自然对数的技术使用,那么在Java中看到像1.39e^-43这样的表达式时,请转换思维,它真正的含义是1.39*10^-43.

注意如果编译器能够正确的识别类型,就不必在数值后附加字符。例如语句

long n3=200;

它不存在含混不清的地方,所以200后面的L是用不着的。

然而,对于语句

float f4=1e-43f;//10 to the power

编译器通常会将指数作为双精度数(double)处理,所以假如没有这个尾随的f,就会收到一条出错提示,告诉我们必须使用类型转换将double转换成float。


原创粉丝点击