byte b1=67;
byte b2=89;
byte b3=(byte)(b1+b2);我是这么算b3的
b1+b2=151  也就是10011100
byte一个字节,int四个字节
那么把int转换成byte的时候直接把int前面的三个字节去掉就行了呀。可以答案这个时候却是-100。很纠结这个问题,望各位大虾详讲下了哈。谢谢

解决方案 »

  1. 10011100   是负数,取反+1就是100,但因为是负数,所以是 -100.byte是有符号的。
      

  2. 记住+好,对于数字类型的是int类型相加,两个byte会先转化为int相加得到一个int的值,
    然后才会强转到byte类型,因为你得到int值超过了byte(-128~127)的范围,
    67+89=156
    所有156-127 = 28
    28-128=-100
    所有结果是-100。
      

  3. 没错,就是去掉前三个字节,去掉后首位为1是负数了。以后使用它的时候,比方说再转为int,前面3个字节补1(符号位)了,保持是负数。
    你可以试一下
    System.out.println(b3 & 0x000000FF)
    倒是能看到156的正数
      

类似问题 »