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的值不变。

猜你喜欢

转载自www.cnblogs.com/dust2017/p/12706088.html