java语言基础--数据类型详解:整数没有超范围可以直接赋值给char、原码反码补码
1、整数没有超范围可以直接赋值给char
1 /* 2 1、整数能否直接赋值给char 3 2、char x = 97; 4 这个java语句是允许的,并且输出语句结果是‘a’ 5 经过测试得出两个结论: 6 2.1当一个整数赋值给char类型变量的时候,会自动转换成char字符型,最终结果是一个字符。 7 2.2当一个整数没有超出byte,short,char的取值范围的时候,这个整数可以直接赋值给byte,short,char类型的变量。 8 */ 9 10 public class CharTest{ 11 public static void main(String[] args){ 12 13 char c1 = 'a'; 14 System.out.println(c1);//输出:a 15 16 //这里会做类型转换吗 17 //97是int类型 18 //c2是char类型 19 char c2 = 97; 20 System.out.println(c2);//输出:a 21 22 //char类型的取值范围:【0~65525】 23 char c3 = 65535; 24 System.out.println(c3); 25 26 //错误:不兼容类型:从int转换到char可能会有损失 27 char c4 = 65536; 28 //解决: 29 char c4 = (char)65536; 30 31 32 //编译通过 33 byte x = 1; 34 short y =1; 35 char z = 1; 36 } 37 }
2、原码反码补码
1 /* 2 1、计算机在任何情况下都能识别二进制 3 2、计算机在底层存储数据的时候,一律存储的是“二进制的补码形式” 4 计算机采用补码形式存储数据的原因是:补码形式效率最高 5 3、对于一个正数来说:二进制原码、反码、补码是同一个,完全相同 6 4、对于一个负数来说:二进制原码、反码(符号位不变,其他位取反)、补码(反码+1) 7 5、分析 byte b = (byte) 150; 8 这个b是多少? 9 int类型4个字节150的二进制码是: 10 00000000 00000000 00000000 10010110 11 强制转换成byte,最终计算机中的二进制码是: 12 10010110(补码形式) 13 逆推出对应的原码 11101010 14 */ 15 public class IntTest{ 16 public static void main(String[] args){ 17 byte b = (byte) 150; 18 System.out.println(b);//输出:-106 19 } 20 }