标签:原理 超出 a+b 补码 不同 现在 ascii码 程序 转译
数据类型--char
一、char
1.1
1 public class Test{ 2 3 public static void main(String[] args){ 4 5 //定义一个char类型的变量,起名c,同时赋值字符‘a’ 6 char c1 = ‘a‘; 7 System.out.println(c);//结果为:a 8 9 //一个中文字符占用2个字节,char类型刚好是2个字节 10 //所以java中的char类型可以存储一个中文字符 11 char c2 =‘果‘; 12 System.out.println(c2);//结果为:果 13 14 //如果加上单引号0就不是数字0了 15 char c3 = ‘0‘; 16 System.out.println(c3); 17 18 //编译报错:类型不兼容 19 char c4 = "a"; 20 System.out.println(c4); 21 22 //错误:未结束的字符文字 23 char c5 = ‘ab‘; 24 System.out.println(c5); 25 26 } 27 }
1.2 数据类型-- 转义字符 ‘\’
1 public class Test{ 2 public static void main(Stirng[] args){ 3 4 //普通的n字符 5 char c1 = ‘n‘; 6 System.out.println(c1);//结果为:n 7 8 //经过编译,发现编译通过,这说明以下并不是一个字符串,而是一个字符 9 //这是一个“换行符”,属于char类型的数据 10 //反斜杠在java语言中具有转义功能 11 char c2 = ‘\n‘; 12 13 System.out.print("A"); 14 System.out.print(c2); 15 System.out.println("B"); 16 输出结果: 17 A 18 B 19 20 21 22 //制表符\t(tab) 23 //强调:制表符和空格不同,它们的ASCII码不同,体现在键盘上两个不同的“按键” 24 char y = ‘\t‘; 25 System.out.print("A"); 26 System.out.print(y); 27 System.out.println("B"); 28 输出结果: 29 A B 30 31 32 33 //要求控制台上输出“反斜杠字符” 34 //反斜杠将后面的单引号转义成不具备特殊含义的普通单引号字符 35 //左边的单引号缺少了结束的单引号字符,编译报错 36 /* 37 char k = ‘\‘; 38 System.out.println(k); //编译报错 39 */ 40 41 //第一个\具有转义功能,将后面的反斜杠转译为普通的反斜杠字符 42 //结论:java当中两个反斜杠代表一个普通的反斜杠字符 43 char k = ‘\\‘; 44 System.out.println(k); 45 46 //输出"HelloWorld!" 47 //System.out.println("\"HelloWorld!\""); 48 49 } 50 }
数据类型--整数型
1、java语言当中的“整数型字面值”被默认当作int类型来处理,要让这个“整数型字面值”被当作long类型来处理的话,需要在“整数型字面值”后面添加1/L,建议使用大写L
2、java语言当中的整数型字面值有三种表示方式:
十进制【是一种缺省默认的方式】
八进制【在编写八进制整数型字面值的时候需要以0开始】
十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
1 public class Test{ 2 3 public static void main(Stirng[] args){ 4 5 int a=10; 6 int b=010;//整数型字面值以0开头,后面那一串数字就是八进制形式 7 int c=0x10;//整数型字面值以0x开头,后面那一串数字就是十六进制形式 8 9 System.out.println(a); //10 10 System.out.println(b); //8 11 System.out.println(c); //16 12 System.out.println(a+b+c); //34 13 14 15 16 //123这个整数型字面值是int类型 17 //i变量声明的时候也是int类型 18 //int类型的123赋值给int类型的变量i,不存在类型转换 19 int i=123; 20 System.out.println(i); 21 22 //456整数型字面值被当作int类型,占用4个字节 23 //x变量被声明的时候是long类型,占用8个字节 24 //int类型的字面值456赋值给long类型的x,存在类型转换 25 //int类型转换成long类型 26 //int类型是小容量 27 //long类型是大容量 28 //小容量可以自动转换成大容量,称为自动类型转换机制 29 long x=456; 30 System.out.println(x); 31 32 33 //2147483647是int类型,占用4个字节 34 //y是long类型占用8个字节,自动类型转换 35 long y=2147483647; 36 System.out.println(y); 37 38 //编译错误:过大整数:2147483648 39 //2147483648被当作int类型4个字节处理,但是这个字面值超出int类型范围 40 // long z=2147483648; 41 // System.out.println(z); 42 43 //解决错误 44 //2147483648字面值一上来就当作long类型来处理,在字面值后面添加L 45 //2147483648L是8个字节的long类型 46 //z是long类型变量,以下程序不存在类型转换 47 long z=2147483648L; 48 System.out.println(z); 49 } 50 }
1 public class Test{ 2 3 public static void main(Stirng[] args){ 4 5 //100L是long类型字面值 6 //x是long类型变量 7 //不存在类型转换,直接赋值 8 long x=100L; 9 10 //x变量是long类型,8个字节 11 //y变量是int类型,4个字节 12 //以下程序可以编译通过吗 13 //编译报错,大容量不可以直接赋值给小容量 14 int y=x; 15 16 //大容量转换成小容量,需要进行强制类型转换 17 //强制类型转换需要加“强制类型转换符” 18 //加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度 19 //所以强制类型转换谨慎使用,因为损失精度之后可能损失严重 20 //强制类型转换原理: 21 //原始数据:00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100 22 //强制转换后的数据:00000000 00000000 00000000 01100100 23 //将左边的二进制砍掉【所有数据强转的时候都是这样完成的】 24 int y=(int)x; 25 System.out.println(y); 26 27 28 //原始数据:00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 29 //强制转换后的数据:10000000 00000000 00000000 00000000 30 //10000000 00000000 00000000 00000000目前存储在计算机内部,计算机存储数据都是采用补码的形式存储 31 //所以以上为补码形式 32 //将以上补码转换为原码就是最终结果 33 long k=2147483648L; 34 int e=(int)k; 35 System.out.println(e);//损失精度严重,结果是负数【-2147483648】 36 37 38 39 40 } 41 }
标签:原理 超出 a+b 补码 不同 现在 ascii码 程序 转译
原文地址:https://www.cnblogs.com/llrra/p/14628384.html