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

今天在看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 stub
		int 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不做显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值