JAVA 位运算符和位移运算符

java位运算符包括
&(与) AND
|(或) OR
^(异或) XOR
~(非) NOT

位移运算符包括
>>(右移)
<<(左移)
>>>(右移,左边空出的位以0填充)
顾名思义,位运算符用于位运算,那就只能对整型或者字符型进行运算。而除了~(非)是一元运算符之外其他的都为二元运算符。

所有位运算都会把值转为二进制进行运算

[b]&(与)[/b]
运算规则:0&0=0 0&1=0 1&0=0 1&1=1
即:两位同时为1时,结果为1,否则为0


int a=(3&5);
System.out.println(a);
System.out.println(Integer.toBinaryString(3));
System.out.println(Integer.toBinaryString(5));


结果打印为
1
011
101
解析:3的二进制为011,5的二进制为101,与操作结果为001。转为十进制是1。


[b]|(或)[/b]
运算规则: 0|0=0 0|1=1 1|0=1 1|1=1
即:参加运算的两个对象只要有一个为1,其结果就为1



int a=(3|5);
System.out.println(a);
System.out.println(Integer.toBinaryString(3));
System.out.println(Integer.toBinaryString(5));


结果打印为
7
011
101

解析:3的二进制位011,5的二进制位101。或操作结果为111。转为10进制为7


[b]^(异或)[/b]
运算规则:1^0=0 0^1=1 1^0=1 1^1=0
即:参加运算的两个对象,如果两个个相应位为“异”(值不同),则该位结果为1,否则为0


int a=(3^5);
System.out.println(a);
System.out.println(Integer.toBinaryString(3));
System.out.println(Integer.toBinaryString(5));


结果打印为
6
011
101

解析:3的二进制位011,5的二进制位101。或操作结果为110。转为10进制为6


~(非)
运算规则:~1=0 ~0=1
即:对一个二进制数按位取反,即0变为1,1变为0

~运算符的优先级比算数运算符、关系运算符、逻辑运算符和其他运算符都高

[b]<<(左移)[/b]
将一个运算符对象的各二进制位全部左移诺干位(左边的二进制位丢弃,右边补0)
操作数每左移一位,相当于该数乘以2

int a=(3<<2);
System.out.println(a);
System.out.println(Integer.toBinaryString(3));
System.out.println(Integer.toBinaryString(12));


结果打印为
12
11
1100

解析:此运算符的意思就是把3的二进制位全部左移两位,右边补2个0。3的二进制位11,左移两位后,右边补2个0就是1100。1100转为10进制为12。
说到底左移操作就相当于2的2次方×3。 每左移1位次方就增1


[b]>>(右移)[/b]
将一个数的各二进制位全部右移诺干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2


int a=(9>>1);
System.out.println(a);
System.out.println(Integer.toBinaryString(9));
System.out.println(Integer.toBinaryString(4));


结果打印为
4
1001
100

解析:9的二进制为1001,右移1位后,左正数补0,右边丢弃。结果为 0100。转为10进制后为4。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值