前言

那年刚找工作那会,就碰到过这么一个简单的题目
“&和&&的区别” 那时知识面窄,大概也就知道1.都是作为逻辑与的运算符。2.&&具有短路功能,计算出前者false,就不需计算后者的true or false。后来在微信群里看到有人问类似的问题,引发了我的思考。

&和&&的区别

相同点

&和&&都可作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,其结果才为true,否则,只要有一方为false,则结果为false。(ps:当要用到逻辑与的时候&是毫无意义,&本身就不是干这个的)

不同点

if(loginUser!=null&&string.IsnullOrEmpty(loginUser.UserName))
  • &&具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,对于上面的表达式,当loginUser为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。(ps:所以说当要用到逻辑与的时候&是毫无意义的)
  • & 是用作位运算的。

总结

  • &是位运算,返回结果是int类型
  • &&是逻辑运算,返回结果是bool类型 what are doing?
    读者黑人问号:我工作三年,你就告诉这点东西,这不是浪费我点击来阅读的流量费?

位运算的使用

直接进入主题位运算,这篇文章本身没有任何难度,工作中甚至用不到位运算,埋个伏笔:
“最高效求出2的3次方"

在掌握位运算之前,应该明确位运算的两个概念。

  • Q1:什么样的数据类型可以进行位运算?位运算的对象是int 、char 类型。幼儿园式说法就是对二进制的1101(13)进行运算
  • Q2:云运算的结果是什么?结果是整型

    常见的5个位运算符
符号 意义 运算对象类型 运算结果类型 示例
~ 逻辑非运算 整型、char 整型 ~a
& 逻辑与运算 a&b
| 逻辑或运算 a|b
<< 位左移运算 a<<2
>> 位右移运算 a>>2

01 位逻辑与运算:&

& 与运算是将两个运算对象按位于进行与运算。规则是:

1&1=10&1=00&0=0

如图:15的二进制是(ps:16位int,32位int多打16个0浪费流量)

0000 0000 0000 1111

20的二进制是

0000 0000 0001 0100

15&20的结果是4

0000 0000 0000 11110000 0000 0001 0100结果:0000 0000 0000 0100在这里插入图片描述

02 位逻辑或运算:|

|位逻辑或运算是将两个运算对象按位进行或运算,运算的规则是

1|1=11|0=10|0=0两位对比有一个1即为1

如15|20的结果计算结果就是31

0000 0000 0000 11110000 0000 0001 0100结果:0000 0000 0001 1111

03 位逻辑异或运算: ^

^位逻辑异或运算 是将两个运算对象按位进行异或运算,规则是:

1异或1等于01异或0等于10异或0等于0

即:相同得0,相异得1。15^20= 27(0001 1011)

0000 1111(15) 0001 0100(20)^运算后的结果0001 1011(27)

04.位逻辑左移运算<<

<<位逻辑左移运算是将按位向左边移动若干位,左移后空出的部分为0。

比如15的二进制0000 1111 左移8位就是1111 0000 0000

0000 0000 0000 1111>> 左移8位的结果:0000 1111 0000 000015<<8=3840

左移3位(15<<3)就是0111 1000结果是120

a<<1 =2a<<2 =4a<<3 =8

结论a左移n位就是相当于a乘2的n次方

05 位逻辑右移运算 >>

位逻辑右移运算是将按位向右边移动若干位,右移后空出的部分为0 比如 0000 1111(15)左移3位(15<<3)就是0000 0001(1)

0000 1111(15)左移3位结果是:0000 0001(3)

右移相当于整除,右移1位相当于除以2的1次方,右移2相当于除以2的2次方。(ps:这个除法是计算机的除法,你懂得)

06 位运算还能干嘛

位运算的骚操作其实挺多的,篇幅不够,所以留着下一篇写。例如:

  • 如将一个月的签到记录保存到1个int类型中
  • 判断奇偶数
  • 权限设置,增删改查4个操作,合并成一个整型
  • 交换两个数
  • 计算2的3次方最高效就是用位运算左移<<
  • 计算a的b次方
  • 一组整型数据,找出没有重复的数

往期推荐


☞面试官:你们前后端分离的接口规范是什么?
☞程序员:我终于知道post和get的区别
☞3万字通俗易懂告诉你什么是.NET?什么是.NET Framework?什么是.NET Core?
☞面试官:你连RESTful都不知道我怎么敢要你?
☞这几款谷歌插件还没安装?
☞面试官:浏览器输入 URL 回车之后发生了什么?

居然不知道和的区别?相关推荐

  1. 我的世界服务器按键显示mode,玩了9年MC,居然不知道按键还能这样操作?!

    原标题:玩了9年MC,居然不知道按键还能这样操作?! <我的世界>是一款自由度极高的沙盒游戏 游戏创建于个人之手,平凡中孕育出的史诗 在这里你可以完成你所想做的任何事情~ 你可以欣赏风景, ...

  2. maven 打包数据库加密_漫画:工作这么多年,你居然不知道 Maven中 Optional 和 Exclusions 的区别?...

    Maven 依赖排除(Exclusions) 因为 Maven 构建项目具有依赖可传递的特性,当你在 pom.xml添加某个依赖时,可能也会引入不需要的依赖到你的项目中,这将会会可能引起如下问题: J ...

  3. microsoft公式3.0_用了20年的word,居然不知道公式还可以这样输入

    说到在word的公式,你可能立刻就想到了"microsoft公式3.0".随着office从office97到office2019的不断更新,word的公式也在不断更新,公式功能也 ...

  4. 计算机二级中的html那道题,计算机等级考试题库:这10道二级C++语言试题是个坑,你居然不知道...

    全国计算机等级考试,面向社会,用于考查应试人员计算机应用知识与技能的全国性计算机水平考试体系.以下是考无忧小编收集整理的二级C++语言试题,希望对您有所帮助. 1.数据结构作为计算机的一门学科,主要研 ...

  5. 10 万开发者都知道的部署方式,你居然不知道!?(内含悬赏活动)

    作者 | 铃铛.滚动的轮子 Cloud Toolkit 的一键部署方式 今天为大家介绍的这一款免费 IDE 插件--Cloud Toolkit,已经有超 12 万开发者下载,是一种公认的极速部署方式, ...

  6. ora-03113 访问某条记录_用了Excel十几年,你居然不知道“记录单”?!可能错过一个亿……...

    点击蓝字发送[2020]免费领 100+图表模板!本文作者:竺兰本文审核:小爽本文编辑:竺兰作为一个 Excel 数据搬运工,我每天的工作就是不断地往表格中输入数据,苦恼啊.但同样作为一个「懂点 Ex ...

  7. Spring Boot使用Servlet居然也可以实现长轮询,敲了5年代码,我居然不知道 - 第413篇

    相关历史文章(阅读本文前,您可能需要先看下之前的系列

  8. 我居然不知道Vue3可以使用hooks函数实现代码复用?

    每天都要开心(▽)哇: 项目开发过程中,我们会遇到一些情况,就是多个组件都可以重复使用的一部分代码逻辑,功能函数,我们想要复用,这可怎么办呢? VUE2我们是怎么做的呢? 在vue2 中有一个东西:M ...

  9. 【原创】StackOverflow 20万关注的问题:如何实现异步Task超时的处理?

    前文传送门 dotNET开发系列 收藏!推荐12个超实用的Visual Studio插件 程序员:这10种糟糕的程序命名,你遇到过几个? 使用Vistual Studio N年,推荐2个异常捕获的技巧 ...

最新文章

  1. 测试mktime和localtime_r性能及优化方法
  2. 大数据笔记2019.5.7
  3. 初进JAVA职场面试小技巧:一个老学长的吐血之作!
  4. 我想要一种语言,只需对它说我要干什么就行
  5. JavaScript学习笔记(四)--复杂数据类型Object
  6. 其他电子计算机配套产品及耗,F-商品和服务税收分类编码-.xls
  7. OFFICE技术讲座:边框的3D与方框的区别
  8. Python 操作 DB2 库_亲测可用
  9. andorid安卓优秀博文源码推荐集锦
  10. 电脑系统运行框代码大全
  11. radix在Character.MIN_RADIX与Character.MAX_RADIX之间
  12. React 16.x折腾记 - (7) 基于React+Antd封装聊天记录(用到React的memo,lazy, Suspense这些)
  13. 企业数字化转型是否缺少部落知识?
  14. 微信h5获取用户地址信息
  15. 英语口语198之每日十句口语
  16. 使用 apifm 插件进行 Flutter 云开发——QQ一键登录/注册
  17. 高斯模糊与图像失焦,附Python代码实现
  18. win10内置linux读取u盘raw,U盘或磁盘分区RAW格式恢复方案
  19. Tar打包 压缩与解压缩到指定目录的方法
  20. Unity限制旋转角度

热门文章

  1. [转贴]犯贱报(一张浓缩大学生活的..)
  2. Teams数据统计 - 通话记录
  3. VSCode的Teams插件
  4. Ubuntu Core 给物联网提供更多安全支持
  5. 排序算法之快速排序详解
  6. bugly中批量隐藏版本
  7. Mybatis——返回类型为 集合嵌套集合 应该如何处理
  8. delphi中利用Indy的TIdFtp控件实现FTP协议
  9. ios之UISplitViewController
  10. vSpere虚拟网卡介绍