1:算数左移<<,2:算数右移>>,3:逻辑右移>>>

package com;

/**
 * 
 * 1:算数左移<<,2:算数右移>>,3:逻辑右移>>>
 * 
 * 算数左移:二进制左移,右边补0.
 * 
 * 算数右移:二进制右移。左边补符号位:正数左边补0,负数左边补1。这样保证符号不变。
 * 
 * 
 * 逻辑右移:二进制右移。左边补0。
 * 注意,负数使用补码计算,左补0就会改变负数的符号位!
 * 
 * 所以算数右移>>和逻辑右移>>>对于正数来说没有区别。
 * 
 * @author lushuaiyin
 *
 */
public class TestMove {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		
		
		int aa=8;
		int bb=-8;
		TestMove.move(aa, 1, 2);
		TestMove.move(bb, 1, 2);
		
		TestMove.move(aa, 2, 2);
		TestMove.move(bb, 2, 2);
		
		TestMove.move(aa, 3, 2);
		TestMove.move(bb, 3, 2);
		
		
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
		int cc=9;
		int dd=-9;
		TestMove.move(cc, 1, 2);
		TestMove.move(dd, 1, 2);
		
		TestMove.move(cc, 2, 2);
		TestMove.move(dd, 2, 2);
		
		TestMove.move(cc, 3, 2);
		TestMove.move(dd, 3, 2);
		
		
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
		int ee=6;
		int ff=-6;
		TestMove.move(ee, 1, 2);
		TestMove.move(ff, 1, 2);
		
		TestMove.move(ee, 2, 2);
		TestMove.move(ff, 2, 2);
		
		TestMove.move(ee, 3, 2);
		TestMove.move(ff, 3, 2);
		
	}
	
	/**
	 * 
	 * @param a  整数
	 * @param moveType 1:算数左移<<,2:算数右移>>,3:逻辑右移>>>
	 * @param moveStep 移动N
	 * @return
	 */
	public static int move(int a,int moveType,int moveStep){
		if(moveType==1){//算数左移
			System.out.println(a+"算数左移操作:"+"("+a+"<<"+moveStep+")结果:"+(a<<moveStep));
			System.out.println("移位前二进制:"+Integer.toBinaryString(a));
			System.out.println("移位后二进制:"+Integer.toBinaryString(a<<moveStep)+"\n");
			return a<<moveStep;
		}else if(moveType==2){//算数右移
			System.out.println(a+"算数右移操作:"+"("+a+">>"+moveStep+")结果:"+(a>>moveStep));
			System.out.println("移位前二进制:"+Integer.toBinaryString(a));
			System.out.println("移位后二进制:"+Integer.toBinaryString(a>>moveStep)+"\n");
			return a>>moveStep;
		}else if(moveType==3){//逻辑右移
			System.out.println(a+"逻辑右移操作:"+"("+a+">>>"+moveStep+")结果:"+(a>>>moveStep));
			System.out.println("移位前二进制:"+Integer.toBinaryString(a));
			System.out.println("移位后二进制:"+Integer.toBinaryString(a>>>moveStep)+"\n");
			return a>>>moveStep;
		}else{//其他情况不做处理
			System.out.println("其他情况不做处理");
			return a;
		}
	}

}
/*
打印:


8算数左移操作:(8<<2)结果:32
移位前二进制:1000
移位后二进制:100000

-8算数左移操作:(-8<<2)结果:-32
移位前二进制:11111111111111111111111111111000
移位后二进制:11111111111111111111111111100000

8算数右移操作:(8>>2)结果:2
移位前二进制:1000
移位后二进制:10

-8算数右移操作:(-8>>2)结果:-2
移位前二进制:11111111111111111111111111111000
移位后二进制:11111111111111111111111111111110

8逻辑右移操作:(8>>>2)结果:2
移位前二进制:1000
移位后二进制:10

-8逻辑右移操作:(-8>>>2)结果:1073741822
移位前二进制:11111111111111111111111111111000
移位后二进制:111111111111111111111111111110

~~~~~~~~~~~~~~~~~~~~~~~~


9算数左移操作:(9<<2)结果:36
移位前二进制:1001
移位后二进制:100100

-9算数左移操作:(-9<<2)结果:-36
移位前二进制:11111111111111111111111111110111
移位后二进制:11111111111111111111111111011100

9算数右移操作:(9>>2)结果:2
移位前二进制:1001
移位后二进制:10

-9算数右移操作:(-9>>2)结果:-3
移位前二进制:11111111111111111111111111110111
移位后二进制:11111111111111111111111111111101

9逻辑右移操作:(9>>>2)结果:2
移位前二进制:1001
移位后二进制:10

-9逻辑右移操作:(-9>>>2)结果:1073741821
移位前二进制:11111111111111111111111111110111
移位后二进制:111111111111111111111111111101

~~~~~~~~~~~~~~~~~~~~~~~~


6算数左移操作:(6<<2)结果:24
移位前二进制:110
移位后二进制:11000

-6算数左移操作:(-6<<2)结果:-24
移位前二进制:11111111111111111111111111111010
移位后二进制:11111111111111111111111111101000

6算数右移操作:(6>>2)结果:1
移位前二进制:110
移位后二进制:1

-6算数右移操作:(-6>>2)结果:-2
移位前二进制:11111111111111111111111111111010
移位后二进制:11111111111111111111111111111110

6逻辑右移操作:(6>>>2)结果:1
移位前二进制:110
移位后二进制:1

-6逻辑右移操作:(-6>>>2)结果:1073741822
移位前二进制:11111111111111111111111111111010
移位后二进制:111111111111111111111111111110



*/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值