java位运算

本篇的主要目的想要把java位运算的相关知识进行一个总结,主要包括表示方式、位运算时移位的方式

一、表示方式

首先学过计算机的我们都应该知道计算机采用补码的方式对数据进行表示,同时java的所有数据类型都是有符号的数据表示形式。即利用最高位作为符号位,正数时为0,负数时为1。我用了下面的这种方式验证。

public static void comfirm() {
		int cnt = 1;
		//a的反码:0000 0000 0000 0000 0000 0000 0000 0010
		int a = 2;
		//b的反码:1111 1111 1111 1111 1111 1111 1111 1110
		int b = -2;
		for (int i = 1; i <= 32; i++) {
			System.out.println("a" + i + "=" + (a & cnt) / cnt);
			cnt *= 2;
			System.out.println("cnt=" + cnt);
		}
		cnt=1;
		for (int i = 1; i <= 32; i++) {
			System.out.println("b" + i + "=" + (b & cnt) / cnt);
			cnt *= 2;
			System.out.println("cnt=" + cnt);
		}
	}
由打印结果知道其与其补码表示的结果一致

二、>>、<<移位运算是逻辑移位还是算术移位

逻辑移位(不管是左移位还是右移位) 都是空缺处补0

算术移位要保证符号位的不改变,对于负数的补码,左移添0、右移添1,正数补码则是都是添0

public static void comfirm() {
		int cnt = 1;
		//a的反码:0000 0000 0000 0000 0000 0000 0000 0010
		int a = 2;
		//b的反码:1111 1111 1111 1111 1111 1111 1111 1110
		int b = -2;
		a=a>>2;
		for (int i = 1; i <= 32; i++) {
			System.out.println("a" + i + "=" + (a & cnt) / cnt);
			cnt *= 2;
			System.out.println("cnt=" + cnt);
		}
		System.out.println("-----------------------------");
		a=2<<2;
		cnt=1;
		for (int i = 1; i <= 32; i++) {
			System.out.println("a" + i + "=" + (a & cnt) / cnt);
			cnt *= 2;
			System.out.println("cnt=" + cnt);
		}
		System.out.println("-----------------------------");
		cnt=1;
		b=b>>3;
		for (int i = 1; i <= 32; i++) {
			System.out.println("b" + i + "=" + (b & cnt) / cnt);
			cnt *= 2;
			System.out.println("cnt=" + cnt);
		}
		System.out.println("b="+b);
		System.out.println("-----------------------------");
		cnt=1;
		b=-2<<3;
		for (int i = 1; i <= 32; i++) {
			System.out.println("b" + i + "=" + (b & cnt) / cnt);
			cnt *= 2;
			System.out.println("cnt=" + cnt);
		}
		System.out.println("b="+b);
	}
由上结果可见其是算术移位。不过这样的实验是多余的,因为逻辑移位针对的是无符号数,而算术移位针对的是有符号数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值