Java移位操作>>,>>>与<<
2017-03-13 15:53
381 查看
带符号数右移
无符号右移
需要特别注意的是,在对char、byte、short等类型的数进行移位操作前,编译器都会自动地将数值转化为int型,然后进行移位操作。由于int型变量只占用4Byte(32bit),因此当右移的位数超过32bit时,移位运算没有任何意义。所以为了保证有效性,采用了取余操作,即
结果:
解释:
1111 1111 1111 1111 1111 1111 1111 1111 -1
1111 1111 1111 1111 1111 1111 1111 1111 -1
0111 1111 1111 1111 1111 1111 1111 1111 2147483647
左移操作
结果:
注意:java中没有无符号左移,因为左移是在后面补0,而右移是在前面补0或者1,有无符号数取决于数的前面的第一位是0还是1,所以右移会产生到底补0还是1的问题,而左移始终是在右边补,不会产生符号问题,所以没有必要有无符号左移
>>,如果是正数,则在最高位补0,负数则补1
无符号右移
>>>,在最高位补0
需要特别注意的是,在对char、byte、short等类型的数进行移位操作前,编译器都会自动地将数值转化为int型,然后进行移位操作。由于int型变量只占用4Byte(32bit),因此当右移的位数超过32bit时,移位运算没有任何意义。所以为了保证有效性,采用了取余操作,即
a>>n等价于
a>>(n%32)
public static void main(String[] args) { int a = -1; System.out.println(a>>1); System.out.println(a>>>1); }
结果:
-1 2147483647
解释:
1111 1111 1111 1111 1111 1111 1111 1111 -1
1111 1111 1111 1111 1111 1111 1111 1111 -1
0111 1111 1111 1111 1111 1111 1111 1111 2147483647
左移操作
<<,最低位用零补位,左移操作实际上相当于每移动一位乘2
public static void main(String[] args) { int a = 3; System.out.println(a); System.out.println(a<<1); }
结果:
3 6
注意:java中没有无符号左移,因为左移是在后面补0,而右移是在前面补0或者1,有无符号数取决于数的前面的第一位是0还是1,所以右移会产生到底补0还是1的问题,而左移始终是在右边补,不会产生符号问题,所以没有必要有无符号左移
<<<,因为与
<<的意义是一样的。
相关文章推荐
- Java 移位操作>>,<<,>>> 位逻辑运算符 &, |,~,^
- <<Think in Java 4 >>中关于使用XOM操作xml文件
- Java<<、>>与>>>移位操作(二)
- <<、>>、>>>移位操作
- java移位操作<<,>>,>>>
- Java 移位操作>>,<<,>>> 位逻辑运算符 &, |,~,^
- Java中的<< >>运算符操作细节
- java中bit操作常用技巧<二>
- <java> <JTable> 关于设置JTable导入数据后自动排序-小记
- <转>java编译问题:使用了未经检查或不安全的操作
- java对redis的基本操作<转>
- 关于JavaScript针对<ul><li>的一些操作
- <转>java编译问题:使用了未经检查或不安全的操作
- <<Java语言程序设计>>进阶篇 Exercise8_7
- JAVA IO流 <一>文件基本操作
- <<Java语言程序设计>>进阶篇 Exercise22_7
- java 移位 位运算符 >>,<<,>>>
- <<Java语言程序设计>>进阶篇 Exercise22_5
- <<Java语言程序设计>>进阶篇 Exercise22_3
- <Head First Java>学习笔记--第四章:方法操作实例变量 对象的行为