Java基础—位运算

/*
位运算符:
	&	按位与
	|	按位或
	^	按位异或	
	~	按位反
	<<	左移
	>>	右移
	>>>	无符号右移

为什么要讲位运算符?
	因为数据在底层都是通过位运算计算的,JDK7的源码在很多地方使用位运算。
	方便将来看懂JDK7的源码。
后面我们可以做做JDK源码中常见类的类源码分析与讲解。
	
*/
public class Demo01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = 4;
		int b = 3;

		System.out.println(a & b);//0
		System.out.println(a | b);//7
		System.out.println(a ^ b);//;7
		System.out.println(~a);//-5
	}

}

/*
位运算符的规则:0假1真
	&	按位与	如果操作时同时为1,则结果为1。
	|	按位或	如果操作时同时为0,则结果为0。
	^	按位异或	如果操作数据不同,则为1,相同则为0。	
	~	按位反	把所有的数据都0变化1,1变化为0.


我们看到这种结果,不猜,自己计算。
在自己计算之前,我们得做一些基础知识普及。
A:我们应该知道位运算符参与运算,是bit参与,其实也就是二进制数据参与运算。
B:我们就必须把数值变化为二进制参与运算。
C:把4和3的二进制做出来。
	4和3本身都是十进制的数据,所以应该用32个bit位表示,但是为了讲课方便,我还是继续采用1个byte表示,也就是8个bit位:
	4的二进制:0 0000100
	3的二进制:0 0000011
D:&	按位与	如果操作时同时为1,则结果为1。
	0 0000100
       &0 0000011
       ----------
            0 0000000 	--	对应的十进制的值是:0
E:|	按位或	如果操作时同时为0,则结果为0。
	0 0000100
       |0 0000011
       ----------
	0 0000111	--	对应的十进制的值是:7
F:^	按位异或	如果操作数据不同,则为1,相同则为0。	
	0 0000100
       ^0 0000011
       ----------
	0 0000111	--	对应的十进制的值是:7
G:~	按位反	把所有的数据都0变化1,1变化为0.
	把4的二进制写出来,为了讲课方便我们用一个byte表示。
	0 0000100
	~操作后。
	1 1111011
	这个值其实是一个补码,又由于最高位是1,所以,我们知道该数据是负数。
	所以,我们应该得到改数据的原码。
	补码:1 1111011
	反码:1 1111010
	原码:1 0000101
	      符号位 5
		-5
	
*/

/*
<< 左移运算符 右边空出来的补齐0,左边最高的去掉了。
>> 右移运算符 左边空出来数据,补齐和最高位相同的数值。
>>> 无符号右移运算符 左边空出来数据,都补齐0。
*/

public class Demo02
{
public static void main(String[] args)
{
	System.out.println(2<<2);//8
	System.out.println(3<<4);//3*2^4-48
	System.out.println(16>>2);//16/(2^2)=4
	System.out.println(64>>3);//64/(2^3)=8	
}
}
/*
首先,我们要知道,位运算符操作的使用,需要把十进制数据转换成二进制数据。
既然是这个样子,那么,我们就把2的二进制写出来。
由于2默认是int类型的数据,所以,用32bit表示
	原来的数据:00000000 00000000 00000000 00000010
	移动两位:
	         (00)000000 00000000 00000000 0000001000	对应的十进制是8

想想我们的十进制:
	如果我是一个个位的数据3,向左边移动一位,就变成了30,就相当于扩大了10倍。
	同理,我们可以得出这样的一个结论,任意进制的数据往左边移动1位,就相当于扩大了
	改数据的进制倍数。
我们这里的二进制往左边移动1位,就扩大了2倍。
如果是移动2位,就扩大多少倍呢?
	应该是2^移动位数的次幂倍。
	
	2<<2	--	2*2^2

同理:我们可以得到一个结论是:
	右移动,就是除以2的多少次幂。
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值