码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-05-13 12:44:10      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

 

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

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

说明两个问题:

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

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

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

        如: 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

        

 

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

标签:

原文地址:http://www.cnblogs.com/felixzh/p/4499935.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!