>>(<<):带符号右(左)移
![](/icons/21758dou.gif)
高位补符号位
>>>(<<<):不带符号右(左)移
![](/icons/21758dou.gif)
高位补零
<<:左移
![](/icons/21758dou.gif)
末尾补零
view plaincopy to clipboardpr
![](/icons/21758int.gif)
?
public
![](/icons/21758static.gif)
void
![](/icons/21758main.gif)
(String
![](/icons/21758zhk2.gif)
args) {
![](/icons/21758int.gif)
i = 11;
String si = Integer.toBinaryString(i);
String si2 = Integer.toBinaryString(i>>>2);//右移
![](/icons/21758dou.gif)
高位补零
String si3 = Integer.toBinaryString(i>>2);//右移
![](/icons/21758dou.gif)
高位补符号位
String si4 = Integer.toBinaryString(i<<2);//左移
![](/icons/21758dou.gif)
末尾补零
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("org:\t" + si);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("正数>>>结果\t" + si2);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("正数>>结果\t" + si3);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("正数<<结果\t" + si4);
//as for nagative number
![](/icons/21758int.gif)
j = -11;
String sj = Integer.toBinaryString(j);
String sj2 = Integer.toBinaryString(j>>>2);
String sj3 = Integer.toBinaryString(j>>2);
String sj4 = Integer.toBinaryString(j<<2);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("org:\t" + sj);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("负数>>>结果\t" + sj2);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("负数>>结果\t" + sj3);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("负数<<结果\t" + sj4);
}
public
![](/icons/21758static.gif)
void
![](/icons/21758main.gif)
(String
![](/icons/21758zhk2.gif)
args) {
![](/icons/21758int.gif)
i = 11;
String si = Integer.toBinaryString(i);
String si2 = Integer.toBinaryString(i>>>2);//右移
![](/icons/21758dou.gif)
高位补零
String si3 = Integer.toBinaryString(i>>2);//右移
![](/icons/21758dou.gif)
高位补符号位
String si4 = Integer.toBinaryString(i<<2);//左移
![](/icons/21758dou.gif)
末尾补零
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("org:\t" + si);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("正数>>>结果\t" + si2);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("正数>>结果\t" + si3);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("正数<<结果\t" + si4);
//as for nagative number
![](/icons/21758int.gif)
j = -11;
String sj = Integer.toBinaryString(j);
String sj2 = Integer.toBinaryString(j>>>2);
String sj3 = Integer.toBinaryString(j>>2);
String sj4 = Integer.toBinaryString(j<<2);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("org:\t" + sj);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("负数>>>结果\t" + sj2);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("负数>>结果\t" + sj3);
![](/icons/21758System.gif)
.out.pr
![](/icons/21758int.gif)
ln("负数<<结果\t" + sj4);
}
view plaincopy to clipboardpr
![](/icons/21758int.gif)
?
org: 1011
正数>>>结果 10
正数>>结果 10
正数<<结果 101100
org: 11111111111111111111111111110101
负数>>>结果 111111111111111111111111111101
负数>>结果 11111111111111111111111111111101
负数<<结果 11111111111111111111111111010100
org: 1011
正数>>>结果 10
正数>>结果 10
正数<<结果 101100
org: 11111111111111111111111111110101
负数>>>结果 111111111111111111111111111101
负数>>结果 11111111111111111111111111111101
负数<<结果 11111111111111111111111111010100
在Thinking in Java第 3章中
![](/icons/21758de.gif)
![](/icons/21758yi.gif)
段话:
移位运算符面向
![](/icons/21758de.gif)
运算对象也是
2进制
![](/icons/21758de.gif)
“位”
![](/icons/21758dou2.gif)
可单独用它们处理整数类型(主类型
![](/icons/21758de.gif)
![](/icons/21758yi.gif)
种)
![](/icons/21758dou2.gif)
左移位运算符(<<)能将运算符左边
![](/icons/21758de.gif)
运算对象向左移动运算符右侧指定
![](/icons/21758de.gif)
位数(在低位补0)
![](/icons/21758dou2.gif)
“有符号”右移位运算符(>>)则将运算符左边
![](/icons/21758de.gif)
运算对象向右移动运算符右侧指定
![](/icons/21758de.gif)
位数
![](/icons/21758dou2.gif)
“有符号”右移位运算符使用了“符号扩展”:若值为正
![](/icons/21758dou.gif)
则在高位插入0;若值为负
![](/icons/21758dou.gif)
则在高位插入1
![](/icons/21758dou2.gif)
Java也添加了
![](/icons/21758yi.gif)
种“无符号”右移位运算符(>>>)
![](/icons/21758dou.gif)
它使用了“零扩展”:无论正负
![](/icons/21758dou.gif)
都在高位插入0
![](/icons/21758dou2.gif)
这
![](/icons/21758yi.gif)
运算符是C或C
![](/icons/21758jiajia.gif)
没有
![](/icons/21758de.gif)
若对char
![](/icons/21758dou.gif)
![](/icons/21758byte.gif)
或者
![](/icons/21758short.gif)
进行移位处理
![](/icons/21758dou.gif)
那么在移位进行的前
![](/icons/21758dou.gif)
它们会自动转换成
![](/icons/21758yi.gif)
个
![](/icons/21758int.gif)
![](/icons/21758dou2.gif)
只有右侧
![](/icons/21758de.gif)
5个低位才会用到
![](/icons/21758dou2.gif)
这样可防止我们在
![](/icons/21758yi.gif)
个
![](/icons/21758int.gif)
数里移动不切实际
![](/icons/21758de.gif)
位数
![](/icons/21758dou2.gif)
若对
![](/icons/21758yi.gif)
个long值进行处理
![](/icons/21758dou.gif)
最后得到
![](/icons/21758de.gif)
结果也 是long
![](/icons/21758dou2.gif)
此时只会用到右侧
![](/icons/21758de.gif)
6个低位
![](/icons/21758dou.gif)
防止移动超过long值里现成
![](/icons/21758de.gif)
位数
![](/icons/21758dou2.gif)
但在进行“无符号”右移位时
![](/icons/21758dou.gif)
也可能遇到
![](/icons/21758yi.gif)
个问题
![](/icons/21758dou2.gif)
若对
![](/icons/21758byte.gif)
或
![](/icons/21758short.gif)
值进行右移位运算
![](/icons/21758dou.gif)
得到
![](/icons/21758de.gif)
可能不是正确
![](/icons/21758de.gif)
结果(Java 1.0和Java 1.1特别突出)
![](/icons/21758dou2.gif)
它们会自动转换成
![](/icons/21758int.gif)
类型
![](/icons/21758dou.gif)
并进行右移位
![](/icons/21758dou2.gif)
但“零扩展”不会发生
![](/icons/21758dou.gif)
所以在那些情况下会得到-1
![](/icons/21758de.gif)
结果
![](/icons/21758dou2.gif)
??无法理解??
延伸阅读
- 2011-7-30-- 类型转换运算符,C++标准转换运算符reinterpret_cast
- 2010-12-9-- 运算符,LESS 让css也支持变量,运算符,include,嵌套规则等等
- 2011-7-31-- 类型转换运算符,C++标准转换运算符static_cast
- 2010-12-9-- 运算符,JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
- 2011-8-1-- 类型转换运算符,C++标准转换运算符dynamic_cast
- 2010-12-9-- 运算符,LESS 让css也支持变量,运算符,include,嵌套规则等等
- 2011-6-6-- java运算符,++运算符在C/C++与C#/JAVA中的差异
- 2011-5-9-- 运算符,6.1.2 自定义运算符
- 2011-4-10-- 运算符,mysql 运算符
- 2011-3-31-- 移位运算,移位运算(部分笔试题)
最新评论