int b=-1;
计算机中的补码是:11111111111111111111111111111111
右边去掉一个1,前面补上一个0.就是0。。。。。。1111;
计算机把正负数都是用补码表示,第一位是符号位。也是就31个1最大表示2的31次方减1==2147483647~~
byte?只不过少几个位数罢了。再说它会自动转型成int。
byte
a=(byte)128;
因为整型数128十六进制为0080h,强制转换后,高八位去掉结果将变为:80h,所以为-128
byte
b=(byte)(-129);
因为整型数-129十六进制为ff7fh,强制转换后,高八位去掉,结果为:7fh,所以为127
>>> 是 用"0"填充前面的位右移
用下面程序,得到如下结果:
a=2147483647 b=-1
a=2147483647 b=2147483647
不明白!
public class gc534 {
public static void main(String[] args) {
int a=-1,a1;byte b=-1,b1;
a1=(int)(a>>>1);
b1=(byte)(b>>>1);
System.out.println("a="+ a1 +" b="+ b1);
System.out.println("a="+ (a>>>1) +" b="+ (b>>>1));
}
}
int b=-1;
在计算机中的补码是32位的(java),因此是:
11111111111111111111111111111111
根据>>>运算符的规则,右移之后在空位补零,因此右移一位之后,变成:
01111111111111111111111111111111
这个就是最终的结果了,换为十进制的数的话,就是:
2147483647。
byte的话,因为byte是8位的,因此同理:
byte=-1的二进制表示为:
11111111
根据>>>规则,
变为:
01111111
二进制就是:
127啦。
基础位运算符“>>>”,查书上的资料吧,记不得了