day02
1. 进制转换问题。
1)其他进制到十进制的转换。
系数乘以基数的权次幂, 结果相加。
2)十进制转换到其他进制。
除以基数 取余数 直到商为0, 余数反转
3)源码、反码、补码。
正数:原码 反码 补码 都一样
负数:反码 -- 原码符号位不变,其他位取反
补码 -- 反码+1。
2. 数据类型。
1)整数型 byte 1个字节 2)浮点型 float 4个字节 3)字符型 char 2个字节
int 4个字节 double 8个字节
long 8个字节
4) A: 整数默认是int类型。long类型需要加L或者l后缀。
B: 浮点数默认是double类型。float类型需要加F或者f后缀。
3. 数据类型转换。
1) boolean类型不参与转换。
2) 隐式转换(从小到大)
byte,short,char -- int -- long -- float -- double
3) 强制转换(从大到小)
格式:
(数据类型)数据;
练习:
byte b = (byte) 300; // 44不会报错
byte by = (byte)130; // -126
计算机中都是用补码进行存储和运算的.
130 二进制
00000000 00000000 00000000 10000010
补码:
00000000 00000000 00000000 10000010
做强制类型转换, 截取后8位,得到是补码.
补码:
10000010
反码:
10000001
原码:
11 11 1110 14+48+64
这个数的十进制是 -126
4)关于byte面试题:
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2; // 此行会报错,因为参与运算的byte类型会自动提升为int类型, 可能损失精度.
byte b4 = 3 + 4; // 不报错,对于字面值常量3和4, jvm会在编译期对其进行计算(优化), 并比较其值是否在byte范围内,如果未超出,则不报错.
4. 算数运算符++运算。
int a = 5;
a = a++; //在运算的时候a会先保留一个副本,然后自增,然后将副本的值赋值给左边。
System.out.println(a); //结果是5。
5.赋值运算符+=问题。
short s = 20;
s += 10;等价于 s = (short)(s+10); //因为+=这种运算符,内含了强制类型转换功能。
s = s + 10; //错误可能会损失精度,s + 10在计算的时候类型先提升为int类型,需要强转为short类型。
|
|