基本类型的强制转换典型笔试面试题
byte a=(byte)127;//127
int x = 0X80;//128
byte b=(byte)x;//-128
byte c=(byte)100;//100
c=(byte)(c*3);//44
int m=0xff;//255
byte d=(byte)m;//-1
二进制的相关知识
原码
对于二进制数,最高位为符号位,0表示正数,1表示负数,剩余数值部分是真值。
反码
对于二进制数,正数的反码就是它本身,负数的反码除符号位外按位取反。
补码
对于二进制数,正数的补码就是它本身,负数的补码符号位取一,数值部分按位取反后末位加一。
由补码求真值,就是由补码求原码
正数:补码即原码
负数:按位取反,末位加一。相当于再求一次补码。
//以int 300为例,解释说明(二进制转换为问题)
int x = 300;
byte bx = (byte)x; //44
- java采用补码存储整数,int型为32位,byte为8位
- 那么300在内存中的表示形式:00000000 00000000 00000001 00101100
- 这样截取后8位就变成00101100,补码表示的时候第一位是符号位,0正1负
- 所以可以知道00101100肯定是一个正数了,正数的补码就是它本身
- 再来看它的数值部分:0101100(即44)
- 又因为是正数,所以就截取变成44了。