java笔记之byte的面试题案例分析

1. byte n=10+127;

分析:a. 10和127属于字面量,经过javac优化后 byte n=127;

b.n 的类型是byte,127的类型默认为int,造成数据类型不匹配,那么javac会判断127是否位于byte类型的取值范围之内;若为范围之内将127的类型转换byte,否则报错。

原理:127在内存中以32位进行存储,那么赋值号右边的数据类型为整形,与赋值号左边的类型不匹配,需要类型转换。

a.校验127是否位于byte的取值范围之内,如果位于,就将第3位的符号记录在第8位,其他位的截掉;若超过范围,就提示错误。

2.byte i=10;

byte j=117;

byte m=i+j;//报错

注:等值号右边不是常量,而是变量,无法确定其值是否位于bye的取值范围,所以报错。

 

3.关于char类型的笔记

java支持Unicode编码,两个字节存储文字,前255仍然存储ASCII所表示的文字信息。

4.关于float与Double的笔记

folate 4字节,1位符号位,8位指数位,23位用来记录数字。

int与folate相比,int的精度高,float的范围大。(int 使用32位存储数字而float为23位,所以int精度高;folate使用8位指数,所以folate的范围大)

因为folate精度尚且不如int类型,所以一般计算不采用float。

注:Double内存的存储结构:1位的符号位,11位的指数位,52位的数字位。

5.类型转换

例: Integer.toBinaryString(int i);

toHexString(int)

toOctalString(int)

 

注:在计算机中都是以补码的形式存储数字

正数:原码与补码都一样。

负数:补码在反码的基础上+1.

 

 

6.byte的强转换的案例

 

byte b=(byte)140;

System.out.println(b);//b=-116

 

注:

补码:11111111  11111111  10001100

反码:11111111  11111111  10001011

原码:10000000 00000000  01110100

原理与案例一类似。

标签