for(i=0;i<4;i++){
num = num << 1;
System.out.println(Integer.toHexString(num));
}
num = num << 1;
System.out.println(Integer.toHexString(num));
}
解决方案 »
- 关于大数操作的问题
- JAVA方法返回一个对象,让我有点迷惑
- 高分,向高手提问 java.io.IOException:underlying input stream returned zero bytes
- 可以把图片存放到数据库的字段中吗??
- socket closed
- 这里有免费的java编程思想(中文版),非常不错,需要的朋友赶快去
- 高手帮看看这些代码帮忙注释一下 谢谢了
- 请问在公司里有一种叫做技术支持的是干什么的
- 为什么没有改变JLabel的背景色?
- jetty启动报does NOT provide an 'addTransformer(ClassFileTransformer)' method
- 菜鸟问题:矩阵乘法的这一句是不是这样写?
- 新年到,新年好,在j2se里第一次散分,望多多捧场!
num << 1 表示按位左移1位二进制位
int num = 0xFFFFFFE;
System.out.println(Integer.toBinaryString(num));
for(int i=0;i<4;i++){
num = num << 1;
System.out.println(Integer.toBinaryString(num));
}
System.out.println(Integer.toBinaryString(Integer.MAX_VALUE)); System.out.println(Integer.toBinaryString(-32));
System.out.println(Integer.toBinaryString(32));
}
^@^
再左移一位是00111111111111111111111111111000,
即111111111111111111111111111000,十进制是1073741816
再左移一位是01111111111111111111111111110000,
即1111111111111111111111111110000,十进制是2147483632,
再左移一位是11111111111111111111111111100000,第一位是1,所以是负数,其值是取反加1再取负,即取反得00000000000000000000000000011111(31)加1得32,取负后即-32。
进行四次<<1操作每次的结果是0x1FFFFFFC
0x3FFFFFF8
0x7FFFFFF0
0xFFFFFFE0//这步结果益处,只保留了后面的计算机内用补码进行运算
把0xFFFFFFE0转换成十进制
因为在这里int是32位的,就是-32了
如果是64位的,那就不是-32了
为什么是这个样子呢?