误导楼主了,sorry,重新解释一下C选项。对于第一个运算,首先,byte b = 1;实际上这个值是编译器先进行了一次检查,范围在byte范围内,则编译通过,
同时将1这个int类型的值在底层转化为了byte类型赋给了b;
再说说b = b += 1;这个运算是将b += 1的计算结果赋给了b,所以我们只说b += 1的运算过程就行了,
b += 1,其实等价于 b = (byte)(b+1);底层会对这个结果进行强转的,所以它编译的时候没事,如果b是127,
那么加1后变成128了,成了int类型了,超过了byte类型的最大范围了,怎么办?这时候底层会强转,把int类型的
前面三个高位丢弃,丢弃后,如果剩下的一位中,最高位为1,则取反加一,就成了负数了,如果最高位为0,直接把 值赋给b
|