[3]位运算

位运算:能直接对二进制进行操作的运算符

1.左移:<<

[1]3<<1=6

/*

1.先将十进制的3,转换为二进制

2.左移1位,得出为6

*/

[1] 00000000 00000000 00000000 00000011 //3

     0000000 00000000 00000000 000000110  //3<<1

//再来一个例子便能得出结论

[2]4<<2=16

//这道题不做过多介绍,通过例子[1]对左移都有了解了

[2] 00000000 00000000 00000000 00000100

     000000 00000000 00000000 0000010000

结论:a<<b=a*2的b次幂。

2.右移:>>

//右移性质与左移类似,可以直接得出结论

结论:a>>b=a/2的b次幂。

2.2无符号右移:>>>

//对于>>>与>>之间,在数为正的情况下,用法一致。至于有什么不同, 先插入一个小知识

[1]~6+1=-6

/*

1.先将十进制的3,转换为二进制

2.将6取反后加1

*/

[1]00000000 00000000 00000000 00000110     //6

    111111111 111111111 111111111 111111001    //~6

    111111111 111111111 111111111 111111010     //~6+1=-6

结论:一个数的二进制最高位为0为正数,那么最高位为1为负数,怎么来的就是取反

并且a的负数就是~a+1

//那么穿插完了小知识,回到无符号右移,与右移的区别

[2]-6>>>2

/*

1.右移,原来是0,最高位补0,原来是1,最高位补1

2.无符号右移,不管原来是什么,最高位补0

*/

[2]  111111111 111111111 111111111 111111010

      00111111111 111111111 111111111 1111110

3.取反:~

//这个没有什么可讲的,就是将0变成1,将1变成0

4.异或:^

[1]6^3=5

  0110

^0011

  0101

[2]6^3^3

  0110

^0011

  0101

^0011

  0110

结论:a^b^b=a

[练习]在不存在第三方变量的情况下,交换两个变量的值。(答案在最下方,在往下翻前,可以先进行思考,自行尝试)

5.与:&

[1]6&2=2

    0110

  &0010

    0010

[2]1(101 1)001

//在不确认某段二进制为0还是1的情况下,可用于取某段二进制的值

//比如我要取(1011),先无符号右移4位,再与上1111,就能得出

6.或:|

[1]6|3=7

  0110

 |0011

  0111

答案:

本小白刚学java不久,还有许多不足,欢迎大佬指出,本小白也会努力改正并变强。好记性不如烂笔头,浇下的汗水与时间,终会开花。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值