为了账号安全,请及时绑定邮箱和手机立即绑定

javaday02-3 位运算符

标签:
Android

位运算符: &(位与)   |(位或)    ~(位取反)    ^(位异或)      

         当这4个的左右边是常数的时候,是位运算符

                  <<    ,     >>    ,    >>>

分析:因为是位运算,所以我们必须先把数据换算成二进制。

&(位与)运算  :有0则0。

|(位或)运算  :有1则1。

^位(异或)运算  :相同则0,不同则1。

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

[代码]xml代码:

?

1

2

3

4

int a = 10;

int b = 20;

System.out.println(a ^ b ^ b); //10

System.out.println(a ^ b ^ a); //20

练习题:

         请自己实现两个整数变量的交换

[代码]xml代码:

?

01

02

03

04

05

06

07

08

09

10

int a = 10;

int b = 20;  //使a,b的值交换

//第一种方法,使用第三方变量(开发中用的)

int c = a;

     a = b;

     b = c;

//第二种方法,使用异或方法(面试用) 左边:a,b,a  右边:a ^ b

a = a^b;

b= a^b;   // b=a^b^b = a

a=a^b;    // a=a^b^a    (此时b在上面已经变成了a)  = a

[代码]xml代码:

?

1

2

3

4

第三种方法:用变量相加

a = a+b; // a = 30

b = a-b; //  b = 30-20 = 10

a = a-b; //  a = 30 - 10 = 20

[代码]xml代码:

?

1

2

第四种方法

b = (b+a) - (a=b);  //  b = (10   + 20) - 20 = 10 , 此时a = b = 20

 

~(按位取反)运算符  :0变1,1变0

<<    :  左移    左边最高位丢弃,右边补齐0

>>   :   右移   最高位是0,左边补齐0;最高为是1,左边补齐1

>>>  :  无符号右移 无论最高位是0还是1,左边都补齐0  

[代码]xml代码:

?

1

2

3

   <<   把  <<  左边的数据乘以2 的  移动次幂

System.out.println(3 << 2);      //  3*2^2 = 3*4 = 12

    >> 把  >>  左边的数据除以2 的  移动次幂

?

1

System.out.println(24 >> 2);   //   24 / 2^2 = 24 / 4 = 6

无论正负:

[代码]xml代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

-24  >>  2 的移动:  

计算出24的二进制:11000

    原码:10000000 00000000 00000000 00011000 

    反码:11111111 11111111 11111111 11100111

    补码:11111111 11111111 11111111 11101000

     

    11111111 11111111   11111111 11101000

    1111111111   11111111 11111111 111010(00) 补码

移动后的计算:

    补码:1111111111 11111111 11111111 111010

    反码:1111111111 11111111 11111111 111001

    原码:1000000000 00000000 00000000 000110

     

    结果:-6

面试题:

                  请用最有效率的方式写出计算2乘以8的结果

[代码]xml代码:

?

1

System.out.println(2 << 3); // 2 *   2^3 = 2 * 8

原文链接:http://www.apkbus.com/blog-833059-61614.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消