1、java当中“整数型字面值”被默认为int类型处理。
2、要让整数型字面值当做long处理的话。需要在整数字面值以后加大写L 。
例如:long i = 1800L ;
3、JAVA当中整数型字面值有三种方式
*十进制 【一种缺省默认的方式】
*八进制 【在编写八进制整数型字面值是需要以 0 开头】
*十六进制【在编写十六进制是需要以 0x 开头】
public class Datatype03
{
public static void main(String[] hfsl){
int a = 10 ;// 十进制
int b = 010;//八进制
int c = 0x10;//十六进制
System.out.println(a);//10
System.out.println(b);//8
System.out.println(c);//16
System.out.println(a+b+c);//34
int cd = 299;
System.out.println(cd);
long e = 2147483648L; //所有整数都默认为int类型其范围为(-2147483648 ~ 2147483647),超出则不能赋值。
System.out.println(e);//如上所述编译不带L 会报错,因为已经超出了其范围。
}
}
强制数据类型转换:当所赋值的数值大小超过范围时候要加强制类型转换符(有可能损失精度)。
例如:
long n = 2147483648 ; 赋值报错 因为 int 的取值范围为(- 2147483648 , 2147483647 ) 所以超出了取值范围。
故应该添加 L 在字面值后面 变成 long n = 2147483648L 将它变成 long 类型数值。
强制类型转换(被转换的字面值过大,就会损失精度)
byte i = 50 ;可以编译通过,因为byte范围 为(-128 , 127 )
byte k =(byte)128; 超出范围 故要加 强制类型转换符号。
并且最终以补码的形式储存在计算机里面
public class Datatype03
{
public static void main(String[] dhu){
long x = 100L;
//int y = x ; //转换产生不兼容,会有损失。int类型是4个字节 long类型是8个字节。
int y =(int)x ;//大容量转换小容量需要强制类型转换,不过可能会损失精度。
//强转原理:原始数据00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100
//强转之后:00000000 00000000 00000000 01100100
//将左边的二进制砍掉
System.out.println(y);//100
long k = 2147483648L;
int e = (int)k;
System.out.println(e); //-21474836489[损失精度严重,结果是负数]
byte b =50;//目前所学知识可知,其难以编译,因为50默认为int类型,byte则为小容量,因此不能编译。
byte c = 127 ;//pass a test 通过
//byte d = 128 ;//不通过
byte d = (byte)128; //Translating by coercion(强制转换)
System.out.println(d);//—128 (complement 补码)
反码 :负数绝对值对应二进制所有二进制位取反再加1.
*/
byte m = (byte) 198;
System.out.println(m);
// 所以判断是否需要添加强制类型转换符,得看所要赋值的数字它是否超出取被复制类型的取值范围。
//例如:short s (—32768 ~ 32767) = (short)32768
short s = 32767;
System.out.println( s );
s = (short)32768;
System.out.println( s );// —32768 超出范围后,输出的以补码形式输出(数字带负号)
}
}