byte base = (byte)((byte)0xff >>> 2);
System.out.println("b = " + base);
System.out.println("b = " + Integer.toBinaryString(base));
/**
* 结果:
* b = -1
* b = 11111111111111111111111111111111
*/
byte base2 = (byte)(0xff >>> 2);
System.out.println("b2 = " + base2);
System.out.println("b2 = " + Integer.toBinaryString(base2));
/**
* 结果:
* b2 = 63
* b2 = 111111
*/
求大神详解
解决方案 »
- 超出打开游标的最大数,为什么?代码如下
- [请教]java使用递归算法来实现字符串翻转?
- 我见过的最好的视频教程网站.
- 怎么在这个while执行前算出循环次数
- 如何不用设立数据源连接jdbc + Access 数据库?
- 急急急!!!关于线程问题的请教
- 关于jena读取rdf文件出错的问题,跪求给位大神解答
- 在java中有没有数据库控件,例如jdbTable,但是是以ResultSet作为参数?
- ABOUT JBUILDER,请教。100’
- 那位考过scjd或想考scjd,咱们切磋切磋吧,那位知道那里有相关的书籍和资料?谢谢!
- java如何实现打印机打印
- eclipse,我按的F11运行的程序,怎么停止程序啊?
byte base = (byte)((byte)0xff >>> 2);这条语句实际执行过程是:
1 (byte)0xff
把int型整数0xff(用2进制表示为 00000000 00000000 00000000 11111111)强制转换成byte型的,截取后8位。用2进制表示是 11111111,因为java都是有符号数,这个数的值是-1.
2 (byte)0xff >>> 2
执行右移2位操作。
因为java的移位操作只针对int型,所以这时要进行默认的类型转换,把byte型的-1 转成int型的-1,这个int型-1,用2进制表示是11111111 11111111 11111111 11111111,因为>>>操作左边空位补零,执行完操作后,这个数是 00111111 11111111 11111111 11111111,其值是1073741823。
3 (byte)((byte)0xff >>> 2)
再次做类型转换,截取后8位。转换后的2进制为 11111111,其值是 -1。Integer.toBinaryString(base) 这个方法要求的参数为int型,所以在执行的时候还是进行了类型转换,把byte型-1 转成int型-1,就是看到的那个结果。
11111111>>>2 --> 00111111 byte base = (byte)((byte)0xff >> 2);右移,带符号 ,则原来符号位(最高位),前面补符号位
11111111>>2 --> 11111111