逻辑操作符、位操作符号的忽略点

 

研究生要毕业了,最近要开始找工作,随便翻看一下基础知识。

逻辑操作符和位操作符都是操作符分类中的一种。

说明两个问题:

第一:短路逻辑操作符和非短路逻辑操作符的区别

        短路逻辑与(&&)    短路逻辑或(||)   非短路逻辑与(&)  非短路逻辑或(|)

        短路的意思就是,计算左操作数后,如果能决定表达式的值,那就不计算右操作数。

        如: if(1==2&&1==1)  //左操作数为假,表达式就一定为假了,就不计算右操作数了

        非短路的意思就是,左右操作数都要计算完,才计算表达式的值 

         如: if(1==2&1==1)  //先计算左操作数为假,右操作数为真,然后,真假为假

         其实,基本用到的就是短路操作符,相比而言,其效率更高,非短路的我是很少用到的目前

         不过,&和|也可以作为位操作符使用,这个可是经常用到的。

          &:按位与    |:按位或    与:1,1为1,其他为0。或 0,0为0,其他为1。

         别的基础的不说了!

第二:关于位操作符>>   >>>   <<的问题

         >>:算术右移,左边直接补全符号位       >>>:逻辑右移,左边直接补全0      <<:算术左移,右边直接补全0

         对于算术左移和算术右移,有计算公式:

          a<<b   <=>  a*2的  b%(a类型的bit数)  次方

          a>>b    <=>  a/2的   b%(a类型的bit数)  次方  前提是:|a|>=|b|

          例如:  -1>>1   用上面的公式算的话就是0。其实不是

                    就拿整数的默认类型int来说

                    对于-1      原码:10…………01

                                   反码:11…………10       

                                                        +1       负数的补码是原码取反再+1

                                   补码:11…………11

                     所以说,对于-1的算术右移,其值是不变的,还是-1。因为补全的是符号位1。

                     对于逻辑右移,补全的是0。就变成了

                                   补码:01…………11      正数的原码即补码

                                   原码:01…………11        <=> 2147483647

                  正数和负数在计算机的存储虽说都是二进制,但是,实质是不一样的。

                  正数在计算机上存储的是原码        负数存储的是补码

                  位操作的本质:是对计算机上存储的二进制位进行操作的。

                  如上面的左右移,对于正数,移动的是原码 ,对于负数,移动的是补码。

                  正数的原码就是补码。负数的原码取反再+1才是补码。

                  所以才会有

                                  -1>>1  为-1

                                -1>>>1 为2147483647

        

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值