位运算以及逻辑短路

<<  >>

  • 一般规律:

左移变小,右移变大,且移动1整个数值变化的倍数是2倍。 

比如:(12<<2)=24

(12>>2)=6

  • 整数和具体的位:

这里n取值为5,k取值为2(k代表的是位的下标,下标从0开始).且以一个字节长8位作为解释。

  • 取整数n二进制的第k位:(n>>k)&1

解释:

n:0000 0101

n>>2: 0000 0001

1:0000 0001

(n>>2)&1: 0000 0001

思路:只要思想是构造,然后用&来操作。即构造一个字节8位只有连续的0和1(此题就是1).然后,当任何一个二进制 和这个数

进行按位与运算,就会结合数值是1的0位和数值是n的其他位。

  • 取整数n二进制的后k位:((1<<k+1)-1)&n

思路:思想还是和上面的一样,就是构造一个字节8位,特征是只有连续的0和1.当n和这个字节做按位与运算的时候,结果就是

结合了这个字节的0位和n的其他位。那么特征字节怎么构造,一般的构造这种特征字节一定需要移动,但是只移动不能构成连续

,所以中间结果减一,就可以得到连续的0,1组合。

总结:

按位与的利用,做了特殊处理,就像以上的做法可以得到惊人的效果。按位与最终的结果是一个组合,即0000...和其他有用的位

就是要得到的位。

异或,按位取反

异或的意思就是按位运算时,同号的正(二进制表示0为正,反之1为负),异号的负。

按位取反,就是0得1,1得0。

这就有了原码,反码,和补码的区别:

原码到反码:除了符号位不变,数值位按位取反,

原码到补码:除了符号位不变,数值位取反加1,。

反码到原码:(反码的反码)除了符号位不变,数值位按位取反。

补码到原码:(补码的补码)除了符号位不变,数值位取反加1,。

逻辑短路

A&&B:当A为假的时候,结果就是假的,就不会再看B,只有结果是真的时候,才会看B的结果。而且取决于B

即,if(A)   B

A||B:当A为真的时候,结果就是真的,就不会再看B,只有结果是假的时候,才会看A的结果。而且取决于B

即   if(!A) B

所以,利用好逻辑运算的短路情况,就能提高编程的效率。

 

 

 

 

 

 

 

未完待续。。。!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值