int a=-1>>;
System.out.println(a);
的运算过程是怎么计算的
>>是右移操作,a=-1>>2是先将-1右移2位,然后将移位后的数据赋值给a。
移位操作是按照二进制码的方式进行的。
-1的二进制码是1的二进制码取反+1。
1的二进制:0x 0000 0000 0000 0001 (以2个字节为例,4个字节是一样的,前面补0就是了)
-1的二进制:0x1111 1111 1111 1111
负数右移的时候,在二进制码的左侧补1,所以-1右移2位后的二进制是:
0x1111 1111 1111 1111
值仍然是-1,所以a的值就等于 -1
-1右移两位,然后赋值给a变量
负数无论怎么右移,结果还是负数,所以左侧补充的是1,因为最高位是1表示负数。
-1的十六进制是FFFFFFFF(默认是int型),也就是所有位都是1。右移后,左侧填补的还是1,所以无论-1右移多少位,结果还是-1
要想看到右移的效果,你可以试试 int a = -8>>2;右移两位相当于除以2的2次方,结果a=-2