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。
- Day8-27.Literals
- Literals
- day8
- DAY8
- Day8
- DAY8
- Day8
- day8
- Day8
- String Literals
- ABAP Literals
- object literals
- Compound Literals
- day8-笔记
- Day8.01
- Day8.02
- Day8.03
- Day8.04
- Thrift 双向通信实现(C#版)
- Noip2015 Day1 T2 信息传递(虽然是图论题但是...)
- 注解 @CrossOrigin
- 机器学习第四课(padding)
- 数组模拟链表之P1160 队列安排
- Day8-27.Literals
- Spark以及生态圈介绍
- EasyStream系列1之rtsp转rtmp
- itext实现word转pdf,添加水印倾斜铺满全屏,禁止修改和复制
- Partition函数
- 剑指offer--链表中环的入口结点
- photoshop注册机,这个必须留下来
- tools:replace="android:icon, android:theme"
- 《程序员的修炼之道》笔记——4、足够好的软件