1,
int i = 445;
byte b = (byte)(i%256);我们知道:i%256=189,如果不用(byte)强制转换,无法通过编译。用了(byte),系统会把32位整形的低八位取出来放进b里面。于是,b的二进制就和189的二进制一样。但是由于第一位是符号位,所以,打印出来的b应该是负数。2,
e=0x0f

解决方案 »

  1.   

    1. 我想可能是这个意思: int转byte用256取模,如果模是<128的,则byte表示的是正数,而模数如果是>128的,则byte就变成了负数了。所以int正整数类型转换成byte有可能是负数的,只不过模数里面>128的时候,我们就把最高位变成了负号,模数的叫法是1xx,而byte的叫法就是负xx了。
    2.测了一下,得到结果: 
    byte b = (byte) 0xf1 -----》 b=15 
    b & 0xff ----------》 241  (不是8位吗?)
    byte e = (byte) ((b & 0xff) >> 4) ---》e=15 
    由于不懂,所以觉得十分奇怪。 0xf1 & 0xff 怎么会是 241? 为什么把最高位也加进去了?不是符号位吗。 而且,b & 0xff --》11110001,再 >> 4 也是有符号扩展,应该是11111111啊? 
    对了,11110001要右移的时候会提升成int,不会是直接在前面加0吧?应该是加1吧?(往范围大的类型转,应该是保证原值大小不变的吧?)