java中的移位操作

java中的移位操作只对int和long有效,byte、short、char升级为int后再进行移位

移位操作符有>>(右移)、<<(左移)、>>>(右移)三种,注意两点:1.没有<<<符号  2.移位是不循环的

三种的区别是

>>是带符号右移,负数高位补1,正数补0

<<左移不管负数还是正数,在低位永远补0

>>>是不带符号右移,不论负数还是正数,高位补0

测试程序:

public class Shift {
	public static void main(String[] args) {
		System.out.println("******************正数左移在低位补0*******************");
		int a = 1;
		a = a << 2;
		System.out.println(a);
		System.out.println(Integer.toBinaryString(a));
		System.out.println("******************正数右移在高位补0********************");
		a = 1;
		a = a >> 2;
		System.out.println(a);
		System.out.println(Integer.toBinaryString(a));
		System.out.println("******从上面结果可以看出:移位是不循环的*****");
		System.out.println("看看负数的移位:");

		System.out.println("***********负数的右移操作高位补1**************");
		int i = -1;
		System.out.println(i + ":");
		System.out.println(Integer.toBinaryString(i));
		i = i >> 2;
		System.out.println(i);
		System.out.println(Integer.toBinaryString(i));
		System.out.println("**********负数的左移操作低位补0*****************");
		i = i << 2;
		System.out.println(i);
		System.out.println(Integer.toBinaryString(i));
		System.out.println("*************再看看>>>操作符*************");
		System.out.println("*************负数的>>>操作高位补0***************");
		i = -1;
		System.out.println(Integer.toBinaryString(i));
		i = i >>> 10;
		System.out.println(i + ":");
		System.out.println(Integer.toBinaryString(i));
		System.out.println("*************注意:没有<<<符号**************");

		System.out.println("**********byte类型移位时要强转换*************");
		byte k = 10;
		System.out.println(Integer.toBinaryString(k));
		k = (byte) ((byte) k >>> 2);
		System.out.println(Integer.toBinaryString(k));
	}
}

运行结果:

******************正数左移在低位补0*******************
4
100
******************正数右移在高位补0********************
0
0
******从上面结果可以看出:移位是不循环的*****
看看负数的移位:
***********负数的右移操作高位补1**************
-1:
11111111111111111111111111111111
-1
11111111111111111111111111111111
**********负数的左移操作低位补0*****************
-4
11111111111111111111111111111100
*************再看看>>>操作符*************
*************负数的>>>操作高位补0***************
11111111111111111111111111111111
4194303:
1111111111111111111111
*************注意:没有<<<符号**************
**********byte类型移位时要强转换*************
1010
10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值