java移位运算符:JAVA的 3个移位运算符

>>(<<):带符号右(左)移高位补符号位

>>>(<<<):不带符号右(左)移高位补零

<<:左移末尾补零

view plaincopy to clipboardpr?
public void (String args) {
i = 11;
String si = Integer.toBinaryString(i);

String si2 = Integer.toBinaryString(i>>>2);//右移高位补零
String si3 = Integer.toBinaryString(i>>2);//右移高位补符号位
String si4 = Integer.toBinaryString(i<<2);//左移末尾补零
.out.prln("org:\t" + si);
.out.prln("正数>>>结果\t" + si2);
.out.prln("正数>>结果\t" + si3);
.out.prln("正数<<结果\t" + si4);

//as for nagative number
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);
.out.prln("org:\t" + sj);
.out.prln("负数>>>结果\t" + sj2);
.out.prln("负数>>结果\t" + sj3);
.out.prln("负数<<结果\t" + sj4);
}
public void (String args) {
i = 11;
String si = Integer.toBinaryString(i);

String si2 = Integer.toBinaryString(i>>>2);//右移高位补零
String si3 = Integer.toBinaryString(i>>2);//右移高位补符号位
String si4 = Integer.toBinaryString(i<<2);//左移末尾补零
.out.prln("org:\t" + si);
.out.prln("正数>>>结果\t" + si2);
.out.prln("正数>>结果\t" + si3);
.out.prln("正数<<结果\t" + si4);

//as for nagative number
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);
.out.prln("org:\t" + sj);
.out.prln("负数>>>结果\t" + sj2);
.out.prln("负数>>结果\t" + sj3);
.out.prln("负数<<结果\t" + sj4);
}

view plaincopy to clipboardpr?
org: 1011
正数>>>结果 10
正数>>结果 10
正数<<结果 101100
org: 11111111111111111111111111110101
负数>>>结果 111111111111111111111111111101
负数>>结果 11111111111111111111111111111101
负数<<结果 11111111111111111111111111010100
org: 1011
正数>>>结果 10
正数>>结果 10
正数<<结果 101100
org: 11111111111111111111111111110101
负数>>>结果 111111111111111111111111111101
负数>>结果 11111111111111111111111111111101
负数<<结果 11111111111111111111111111010100


在Thinking in Java第 3章中段话:
  移位运算符面向运算对象也是
   2进制“位” 可单独用它们处理整数类型(主类型种)左移位运算符(<<)能将运算符左边运算对象向左移动运算符右侧指定位数(在低位补0) “有符号”右移位运算符(>>)则将运算符左边运算对象向右移动运算符右侧指定位数“有符号”右移位运算符使用了“符号扩展”:若值为正则在高位插入0;若值为负则在高位插入1Java也添加了种“无符号”右移位运算符(>>>)它使用了“零扩展”:无论正负都在高位插入0运算符是C或C没有
  若对char或者进行移位处理那么在移位进行的前它们会自动转换成只有右侧5个低位才会用到这样可防止我们在数里移动不切实际位数若对个long值进行处理最后得到结果也 是long此时只会用到右侧6个低位防止移动超过long值里现成位数但在进行“无符号”右移位时也可能遇到个问题若对值进行右移位运算得到可能不是正确结果(Java 1.0和Java 1.1特别突出)它们会自动转换成类型并进行右移位但“零扩展”不会发生所以在那些情况下会得到-1结果??无法理解??
Tags:  java运算符 c语言移位运算符 移位运算符 java移位运算符

延伸阅读

最新评论

发表评论