Thinking in java 代码练习 第一天 第一例 数据类型-直接常量 草稿

<pre name="code" class="java">/**
 * 3.9 直接常量
 * 所谓直接常量简单来说,就是有些数据常量,它可以表示的数据类型可能会比较歧义,比如数值5可以表示long、short、int.
 * 那么java提供一些字符去标识这些常量这样,它就能明确的告诉编译器的数据类型,这样有助于内存分配不同的空间。
 * 比如 题中0x177、0177、177不同的进制表示形式,表达的数值大小不是一样的,1和1f他们的大小虽然一致,但其实在内存的长度是不一样的。
 * java语法提供这中标识形式,其实我觉得就是用来支持多种数值的定义,而不仅仅十进制和int类型。
 */
 
 public class Literals{
	 public static void main(String[] args){
		 int i1 = 0x2f;
		 System.out.println("i1: " + Integer.toBinaryString(i1));
		 int i2 = 0x2F;
		 System.out.println("i2: " + Integer.toBinaryString(i2));
		 int i3 = 0177;
		 System.out.println("i3: " + Integer.toBinaryString(i3));		 
		 char c = 0xffff;
		 System.out.println("c: " + Integer.toBinaryString(c));		 
		 byte b = 0x7f;
		 System.out.println("b: " + Integer.toBinaryString(b));		 
		 short s= 0x7fff;
		 System.out.println("s: " + Integer.toBinaryString(s));		
		 long n1 = 200L;	
		 long n2 = 200l;
		 long n3 = 200;
		 float f1 =1;
		 float f2 = 1F;
		 float f3 = 1f;
		 double d1 = 1d;
		 double d2 = 1D;
		 //测试去掉前后的标识,对打印结果有何影响
		 int i11 = 0x2;
		 System.out.println("i11: " + Integer.toBinaryString(i11));		 
		 int i12 = 2;
		 System.out.println("i12: " + Integer.toBinaryString(i12));	
		 int i13 = (int)2f;
		 System.out.println("i13: " + Integer.toBinaryString(i13));				 
		 /*
		 i1: 101111
		 i2: 101111
		 i3: 1111111
		 c: 1111111111111111
		 b: 1111111
		 s: 111111111111111
		 i11: 10
		 i12: 10
		 i13: 10
		 */
	 }
 /*
  * 1、一个数值类数据,可以在具体数值前面或者后面添加符号,前面表示进制形式,比如0x表示是16进制,0表示8进制,没有默认为10进制。
  *  后面的也可以添加符号,它表示具体的数据类型,比如f表示浮点型,l表示长整型。
  *  Integer.toBinaryString方法,是以二进制无符号整数形式返回一个整数参数的字符串表示形式
  *  i1 :0x2f 表示一个16进制,数值2,浮点型, 0020 ,预期结果 0000 0000 0010 0000 ,假如没有0x我认为它是10进制的数据,会有什么区别,好像没有;还有增加f的说明,只是决定了字符的长度并不会改变的它的值?  修正 :0010 1111
  *  i2: 个人觉得跟i1没有区别,因为大写F真是float的包装类。 0010
  *	 i3: 8进制表示形式 001007007,假如没有0在前面,我们还以为是10进制177, 001111111
  *  c: 16进制,因为有f必须是16进制,不然系统是无法判断,不能因为这个数值表示中有f出现就认为是16进制,因为有可能只是表示float类型;这样要弄清楚java直接常量的规范是有点难啊,后面
  *  最后一个f到底是数值还是表示是float?因为该数值是char,所以后面不可能表示float,就是数值 1111 1111 1111 1111,我有理由怀疑数值后面的标识都是大写才是具体类型比如i2,而小写则是数值。
  *	 b: 0000 0000 0000 0111,1111111
  *  s: 0111 1111 1111 1111
  *
  */
 }
 

个人根据java的学习的对于常量表示觉的有如下规范:
1、一个具体数值可以在前面增加标识,指定它具体的进制表现形式,比如0x:16进制,0:8进制,没有话默认是10进制。
 2、一个具体是指可以在后面增加表示,制定它具体的数据类型,比如F或者f表示float,D或者d表示double,L或者l表示long。
但是要注意的是,示例中 "i2= 0x2F",为什么这个f是表示的数值,而不是指定0x2是float类型,我觉得应该只有10进制的数值形式才能指定为其它非int类型的数据,比如2f。


 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值