java 运算符

java 运算符&(与)、|(或)、~(非)、^(异或)、<<(左移)、>>(右移)、>>>(无符号右移)

^ 异或:

异或运算(^)都以二进制数据为基础进行的运算。也就是说当代码中使用到异或运算时,都会先将两个条件进行转换,转换成二进制数据后,再进行运算。异域中同位如果值相同(都是0或者都是1)则为0,不同(一个是0,一个是1)为1。

int a=4;
int b=6;
int c = a^b;//c的值是a和b的异或。值为2.
运算过程:
a转换为二进制:0100
b转换为二进制:0110
0100^0110=0010
0010转换为10进制:2
所以,c的值为2

在学校的时候,我们曾用^给两个变量交换值(在不适用第三方变量的情况下).
int a = 4;
int b = 6;
a = a ^ b;
b = a ^ b;
a = a ^ b;
输出结果:
a = 6;
b = 4;

<<(左移)和>>(右移)运算法则相同, 这里用<<举例

t i = 1;
int i1 = i << 1; 相当于(i*21次方)
int i2 = i << 2; 相当于(i*22次方)
int i3 = i << 3; 相当于(i*23次方)
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);

输出的结果
2  
4
8
运算过程:
i1: 先将i转为二进制0001;
0001向左移动一位不够的用0补,结果0010;0010转为十进制等于2;
i1: 先将i转为二进制0001;
0001向左移动两位不够的用0补,结果0100;0100转为十进制等于4;
i1: 先将i转为二进制0001;
0001向左移动三位不够的用0补,结果1000;1000转为十进制等于8;

总结:
左移相当于i*2的n次方;
i << 1; 相当于(i*21次方)
右移相当于i/2的n次方;
i >> 1; 相当于(i/21次方)

无符号右移

只对于32位和64位才有意义。
因为java中的int型占用4个字节,也就是32个二进制位。对于移位运算如果你移动了32位,那么所有的位都移出了,就没什么意义了,所以系统会先将移动的位数对32取模。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值