位运算

一 位运算符

&与运算:被比较的两个数,最后一位都为1,结果才是1

比如11&15,他们二进制是1011和 1111

1011

1111

结果1011,所以是11

比如128和129,他们二进制是10000000和 1000000100001101

10000000

10000001

结果=10000000所以结果是128

|或运算:被比较的两个数的二进制位数只有一个是1就为1,

我们计算11|15

1011

1111

=1111所以结果是15

我们计算128和129

10000000

10000001

=10000001结果为129

^异或运算:真真为假,假假为假,真假为真,假真为真。是转换成二进制按位进行比较,1111^0000 1-0为真1,

1-0为真1,1-0为真1,1-0为真1,那么结果就是1111,还是15.

~非运算:如果二进制位是1,结果为0,如果为是0,结果为1

比如~11

那么结果就是1011 – 0100

二 位移运算

<<左位移

向左移动n位,然后在低位补0.

16<<3

00000000 0000 0000 0000 0000 0001 0000红色为移掉部分

结果00000000 0000 0000 0000 0000 1000 0000 红色为补齐

结果:128

>>右位移(有符号)

向右移动n位,在高位补0,如果为负数,在高位补1

16>>3

00000000 0000 0000 0000 0000 0001 0000 红色为移掉部分

00000000000 0000 0000 0000 0000 0001 0 红色为补齐部分

结果为2

-16>>3

0000 0000 0000 0000 0000 0000 0001 0000

去反

1111 1111 1111 1111 1111 1111 1110 1111

加1

1111 1111 1111 1111 1111 1111 1111 0000

然后右移3位

1111 1111 1111 1111 1111 1111 1111 0000

1111 1111 1111 1111 1111 1111 1111 1110

>>>无符号右位移

向右移动n位,在高位补0,不考虑正负符号

16>>>3结果为2

-16>>>3

1111 1111 1111 1111 1111 1111 1111 0000

0001 1111 1111 1111 1111 1111 1111 1110

 

 

====================================================

假设A = 25,B =44;

那么二进制总共8位,每一位对应着一个值,从最低位到最高位依次是1,2,4,8,16,32,64,128,所以我们的每一个数组都可以根据这个计算出来

A= 25, 16 < 25 < 32,所以16位置肯定是1,现在还剩25-16 =9, 8< 9 <16,所以8的位置肯定是1 ,最后9-8 =1, 1的话刚好是最低位的位置

结果就是 

12864 32 16 8 4 2 1

0     0  0   1  1 0 0 1

 

B= 44,<32<44<64,所以32的位置上是1,44-32=12 < 16所以 8的位置1,12-8  = 4 那么4的位置就是1,最终二进制结果就是

12864 32 16 8 4 2 1

0     0  1   0  1 1 0 0

 

那么我们现在计算 A& B 和 A|B 和 A^B

第一种 A& B

00 0 1 1 0 0 1

00 1 0 1 1 0 0

我们知道& 表示比较的双方都需要为true

所以0&0= 0, 0&1=0 1&0 =0 1 & 1 =1

所以结果就是

00 0 0 1 0 0 0 转化为10进制就是8

 

第二种 A|B 只要有一个是true,结果为true

0|0= 0 1|0 =1 0|1 =1 1|1 =1

00 0 1 1 0 0 1

00 1 0 1 1 0 0

 

00 1 1 1 1 0 1 转化为10进制就是61

 

第三种异或A^B

异或表示有一个为真且有一个为假才算真,否则为假也就是不能同时为真或者同时为假

00 0 1 1 0 0 1

00 1 0 1 1 0 0

 

00 1 1 0 1 0 1 结果为0*128+0*64+1*32 +1*16+0*8 + 1*4 + 0*2 + 1*1= 53

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值