P97 Java零基础---整数没有超范围可以直接赋值给char
/*
1.整数是否直接赋值给char
2.char x=97;
这个java语句是允许的,并且输出的结果是'a'
经过这个测试得出两个结论:
第一个结论:当一个整数赋值给char类型变量的时候,会自动转换成char字符型。
最终的结果是一个字符。
第二个结论:当一个整数没有超出byte short char 的取值范围的时候
这个整数可以直接赋值给byte short char 类型的变量。
*/
public class CharTest03{
public static void main(String[] args){
char c1='a';
System.out.println(c1);
//这里会自动做类型转换吗?
//97是int类型(这是java中规定,默认当做int处理)
//c2是char类型
char c2=97;
System.out.println(c2);
//char类型取值范围:[0-65535]
char c3=65535;//实际上最终是一个 看不懂 的字符。
System.out.println(c3);
//错误:不兼容的类型;从int转换到char可能会有损失。
char c4=(char)65536;
System.out.println(c4);
}
}
P98 Java零基础---二进制原码补码反码
/*
1.计算机在任何情况下都只能识别二进制
2.计算机在底层存储数据的时候,一律存储的是 二进制的补码形式
计算机采用补码形式存储数据的原因是:补码形式效率最高。
3.什么是补码那:
二进制有:原码、反码、补码形式效率最高。
4. 对于一个正整数:二进制的原码、反码、补码是同一个,完全相同。
int i=1;
对应的二进制原码:00000000 00000000 00000000 00000001
对应的二进制反码:00000000 00000000 00000000 00000001
对应的二进制补码:00000000 00000000 00000000 00000001
对于一个负数:二进制的原码、反码、补码是什么关系:
byte i=-1;【二进制数最左端的数字位符号位:0代表正,1代表负】
对应的二进制原码:10000001
对应的二进制反码(符号位不变,其他位取反):11111110
对应的二进制补码(反码+1):11111111
5.分析:byte b=(byte)150;
这个b是多少那:
int类型的4个字节的150的二进制是什么那:
00000000 00000000 00000000 10010110
将以上的int类型强制类型转为1个字节的byte,最终在计算机中的二进制码是:
10010110
计算机永远存储的都是二进制补码形式。
10010110这个是二进制的补码形式,你可以采用逆推的方式推算出
这个二进制补码对应的原码是什么。
10010110 --->二进制的补码形式
10010101 --->二进制的反码形式
11101010 --->二进制的原码形式
*/
public class IntTest05{
public static void main(String[] args){
//编译报错:因为150已经超出了byte取值范围,不能直接赋值,需要强转:
//byte b=150;
byte b=(byte)150;
//这个结果输出多少:
System.out.println(b);
}
}
P99 Java零基础---byte short char的混合运算
/*
结论:byte、char、short做混合运算的时候,各自先转换成int在做运算。
*/
public class IntTest06{
public static void main(String[] args){
char c1='a';
byte b=1;
//注意:这里的是”+”是负责求和的
System.out.println(c1+b); //98
//错误:不兼容的类型,从int转换到short可能会有损失:
//short s=c1+b; //编译器不知道这个加法最后的结果是多少,只知道是int
short s=(short)(c1+b);
System.out.println(s);
int a=1;
//错误:不兼容的类型,从int转换到short可能会有损失,
//short x=1;可以
short x=a;//不可以,编译器只知道a是int类型,不知道a中存储的是那个值。
System.out.println(x);
}
}
P100 Java零基础---多种数据类型混合运算
/*
多种数据类型做混合运算的时候。
最终的结果是”最大容量”对应的类型
char+short+byte 这个除外。
因为三者混合运算的时候,会各自先转换成int在做运算。
*/
public class IntTest07{
public static void main(String[] args){
long a=10L;
char c='a';
short s=100;
int i=30;
//求和:
System.out.println(a+c+s+i); //237
//错误:不兼容的类型,从long转换到int可能会有损失
//计算结果是Long类型:
//int x=a+c+s+i;
int x=(int)(a+c+s+i);
System.out.println(x);
//一下程序执行的结果是:
//java规定:int类型和int类型最终的结果还是int类型。
int temp=10/3; // /是除号(最终取整)
System.out.println(temp);//3
//在java中计算结果不一定是精确的。
int temp2=1/2; //
System.out.println(temp2);//0
}
}