13 位运算符

位运算符

位运算符有哪些?

& 位与
| 位或
^ 位异或
>> 向右移
>>> 无符号右移
<< 向左移

位运算符都是操作的二进制

用法:
&,|,^ 的用法
&:有0则0
|:有1则1
^:相同则0,不同则1

例:

System.out.println(6 & 3);              //2
System.out.println(6 | 3);              //7
System.out.println(6 ^ 3);              //5 

分析:

上面这些运算符会将数字转换成2进制再进行运算。6的二进制是110,3的二进制是011。根据上面的用法规则里面,列几个竖式:

   110
&   011
-----------
    010     十进制的2

    110
|   011
-----------
    111    十进制的7

    110
^   011
-----------
    101    十进制的5

^的特点:一个数据对另一个数据位异或两次,该数本身不变。

例:

System.out.println(5 ^ 10 ^ 5);

左移和右移

<<:左移   左边最高位丢弃,右边补齐0
>>:右移   最高位是0,左边补齐0;最高为是1,左边补齐1
>>>:无符号右移 无论最高位是0还是1,左边补齐0

例:

//右移,向右移动n位就是除以2的n次幂,向左移动n位就是乘以2的n次幂
    //System.out.println(12 >> 1);
    //System.out.println(12 >> 2);
    //System.out.println(12 << 1);      //24
    //System.out.println(12 << 2);      //48

小练习

1、请实现两个整数变量的交换(不能使用第三方变量)

2、最有效率的算出2 * 8的结果

答案:
1、实现两个整数变量的交换很简单,但是这道题目却明确指出不能使用第三方变量。有两种方法。
方法一:

int a = 20;
int b = 10;
a = a + b;
b = a - b;
a = a - b;

方法一有个缺点,如果数值超出了int类型的取值范围,将会损失精度

方法二:

    int a = 20;
    int b = 10;
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

2、直接操作二进制是比较快的,所以使用左移符号

System.out.println(2 << 3);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值