小白学习之路(二):java 中> , >> , >>>的区别

来源:互联网 发布:淘宝客推广链接被篡改 编辑:程序博客网 时间:2024/05/21 07:52

今天在看ArrayList的源码的时候,突然发现有这样一个操作符 >> ,第一感觉就是C++里面的cout<<   ,  cin>>,但貌似我看的JDK源码啊 = =。于是乎立马去百度百度,了解了下java中>  ,   >>  , >>> 三者的区别。以下是个人学习心得,个人学习记录,如有错误,欢迎大家纠正。


最常见的>  和  < ,就不在这里细说了啊。直接说>>的作用。在计算机中,各种机器数用二进制补码的形式存在,并且各种运算操作都转换乘补码形式的加法。而 int num = 5;  num = num >> 1; 的意义为将num的的二进制补码右移一位,可想而知, num << 1 的意义为将Num的二进制补码左移一位。另外,稍微补充一下,正数的二进制补码形式无论左移或者右移都补0,负数的二进制补码形式左移补0,右移补1。


至于 >>>,意义就是无视符号位,右移。(值得注意的是,java好像并没有 <<< ,网上说是左移不会引起符号位变化,所以和 << 作用一样)

以下是例子。

public class Test {public static void main(String[] args) {// TODO Auto-generated method stubint num = -5;System.out.println("first:");toBinary(num);System.out.println("Second:");num = num >> 1;//右移一位toBinary(num);System.out.println("Third:");num = -5;num = num << 2;//左移2位toBinary(num);System.out.println("Forth:");num = -5;num = num >>> 1;//无视符号位右移一位toBinary(num);}public static void toBinary(int i ){System.out.println(Integer.toBinaryString(i));System.out.println("length:"+Integer.toBinaryString(i).length());}}
运行结果:



由于int 类型数占4个字节,即32位。最后的length:31 原因是忽略符号位右移一位,即可等同与正数二进制补码右移一位,添0, 0不做显示。

0 0
原创粉丝点击