博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
逻辑操作符、位操作符号的忽略点
阅读量:6261 次
发布时间:2019-06-22

本文共 946 字,大约阅读时间需要 3 分钟。

 

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

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

说明两个问题:

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

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

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

        如: 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://fiqsa.baihongyu.com/

你可能感兴趣的文章
java数组或集合返回空的问题
查看>>
【转】gc日志分析工具
查看>>
java多线程系列2-线程控制
查看>>
godep 包管理工具
查看>>
爬虫工程师要求
查看>>
Linux 远程查看tomcat控制台
查看>>
【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)...
查看>>
[转] “error LNK2019: 无法解析的外部符号”之分析
查看>>
演示-JQuery关系选择器
查看>>
微信支付接口之jsApiPay教程
查看>>
C#十种语法糖
查看>>
PHP 如何显示大数字,防止显示为 科学计数法 形式
查看>>
数据扩展性探讨和总结--转
查看>>
spider RPC高级特性
查看>>
C# 导出资源文件到硬盘
查看>>
修复 ThinkPHP3.2.3 抛出异常模块的一个BUG,关闭字段缓存功能
查看>>
更改MySQL数据库的编码为utf8mb4
查看>>
android自动化测试--appium运行的坑问题及解决方法
查看>>
mysql Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’
查看>>
TeamCity : .NET Core 插件
查看>>