day02作业-------Java语言基础数量部分
作业
1. 将67转换为 二进制,八进制,十六进制,将 0b10100101, 0345, 0xef 转换为十进制
2. 字长为8,已知原码 0110 1010 和 1100 0110, 求它们的补码,已知补码 0110 1010 和 1100 0110, 求它们的原码
3. 语句byte b = 300;编译能通过吗?如果不能,怎样让它通过?转换之后其值是多少?
答案:
1.
67 --> 0b1000011
--> (001)(000)(011) --> 0103
--> (0100)(0011) --> 0x43
0b10100101 = 1*2^7+0*2^6+1*2^5+0*2^4+0*2^3+1*2^2+0*2^1+1*2^0 = 165
0345 = 3*8^2+4*8^1+5*8^0 = 229
0xef = e*16^1+f*16^0 = 239
2.
a.原码0110 1010的补码0110 1010,
b.原码1100 0110的补码1011 1010,
c.补码0110 1010的原码0110 1010,
d.补码1100 0110的原码1011 1010.
3.
编译不能通过,把语句改为byte b = (byte)(300); ,这样能编译通过,通过后b的值为44。
300 = 256 + 32 + 8 +4 -->二进制原码 0,1 0010 1100
300的补码为0,1 0010 1100
300超过byte型数据的取值范围(-128--127),用强制类型转换为byte型,数据溢出,会丢失精度。
b的补码为0,010 1100
b的原码为0,010 1100 --> 结果为44.
或者可以把变量b定义为int变量,int b = 300;,这样b的值不变。