数据类型隐式转换:当数据类型不一样时,将发生数据类型转换
小数据类型--->大数据类型 自动转换
数据类型强制转换:
大数据类型--->小数据类型 强制转换
强制转换写法:
小数据类型 变量名= (小数据类型)大数据类型变量名
注意:
int a = (int)3.99;
这样会出现精度损失,所有小数位被舍弃
int a = (int)6000000000L;
这样会出现数据溢出,超出数据类型范围
口诀:byte、short、char运算时,自动转换成int类型,两个不同数据类型运算,结果取决大数据类型。多个类型混合运算时,会遵循下面顺序:byte,short,char,---int---long---float---double。
数据类型转换面试题:下面程序有问题,在哪里?
byte b1 = 3;
byte b2 = 4;
byte b3 = b1+b2;
byte b4 = 3+4;
简答:byte运算,自动转换为int类型,把int赋值给byte会损失精度。
而两个常量相加是固定的值,所以b4可以通过。
数据类型转换面试题:下面程序有问题,在哪里?
short s1=1;s1=s1+1;和short s1=1;s1+=1;
简答:前面s1+1,"1"是int,"s1"是short,一旦参与运算,"s1"提升int,与要被赋值的s1冲突。
正确答案是s1=(short)s1+1;
后面s1+=1,会自动隐式转换,转换的结果是s1 = (short)(s1 + 1),所以正确。
求码值: 计算机使用二进制,而人使用十进制,所以要有转码出现。
原码:最高位是符号位,‘0’表示正,‘1’表示负,其余位表示数值的大小。
反码:正数的反码与原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
练习:
已知原码求补码-------0b10110100
10110100(原码)
11001011(反码)
11001100(补码)
已知补码求原码-------0b11101110
11101110(补码)
11101101(反码)
10010010(原码)