居然不知道和的区别?

前言

那年刚找工作那会,就碰到过这么一个简单的题目
“&和&&的区别” 那时知识面窄,大概也就知道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=1
0&1=0
0&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 1111
0000 0000 0001 0100
结果:
0000 0000 0000 0100在这里插入图片描述

02 位逻辑或运算:|

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

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

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

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

03 位逻辑异或运算: ^

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

1异或1等于0
1异或0等于1
0异或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 0000
15<<8=3840

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

a<<1 =2
a<<2 =4
a<<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 回车之后发生了什么?


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【DevOps进行时】自动化测试之单元测试

在DevOps建设中&#xff0c;主流的测试分层体系可以分为单元测试、接口测试和界面测试。Google曾提出一个经验法则&#xff1a;70%的小型测试&#xff0c;20%的中型测试&#xff0c;10%大型测试。当然&#xff0c;这个比例不是确定的&#xff0c;不同类型的项目&#xff0c;测试…

Zongsoft.Data 发布公告

很高兴我们的 ORM 数据访问框架(Zongsoft.Data)在历经两个 SaaS 产品的应用之后&#xff0c;今天正式宣布对外推广。它是一个类 GraphQL 风格的 ORM(Object/Relational Mapping) 数据访问框架。又一个轮子&#xff1f;在很长时间里&#xff0c;.NET 阵营似乎一直缺乏一个被普遍…

使用 .NET Core模板引擎创建自定义的模板和项目

本文要点.NET CLI 包含了一个模板引擎&#xff0c;它可以直接利用命令行创建新项目和项目项。这就是“dotnet new”命令。默认模板集涵盖了默认控制台和基于 ASP.NET 的应用程序以及测试项目所需的基本项目和文件类型。自定义模板可以创建更加有趣或定制化的项目和项目项&#…

.NET Core前后端分离快速开发框架(Core.3.0+AntdVue)

时间真快&#xff0c;转眼今年又要过去了。回想今年&#xff0c;依次开源发布了Colder.Fx.Net.AdminLTE(254Star)、Colder.Fx.Core.AdminLTE(335Star)、DotNettySocket(82Star)、IdHelper(47Star)&#xff0c;这些框架及组件都是本着以实际出发&#xff0c;实事求是的态度&…

.Net开发3年,应聘大厂惨遭淘汰,如何翻身打脸面试官?

(设计师忘记了&#xff0c;这里还有个双十一福利课&#xff0c;还能1元秒杀&#xff01;)

面对金九银十铜十一你真的准备好了吗?

作者&#xff1a;回首笑人间&#xff0c;高级Java工程师一枚&#xff0c;热爱研究开源技术&#xff0c;架构师社区合伙人&#xff01;前言&#xff1a;又是一年一度的金九银十跳槽季&#xff0c;回首在经历了半个月的求职奔波后&#xff0c;终于又能安稳的静下心来敲代码了&…

深入理解二叉搜索树

什么是二叉搜索树&#xff1f; 顾名思义&#xff0c;一颗二叉搜索树是基于二叉树来组织的&#xff0c;它包括许多动态集合操作&#xff08;Search&#xff0c;MiniNum, MaxiNum, Prodecessor, Successor, Insert 和Delete等&#xff09;。二叉搜索树上的基本操作所花费的时间与…

深入理解堆(最大堆,最小堆及堆排序)

基本概念&#xff1a; 1、完全二叉树&#xff1a;若二叉树的深度为h&#xff0c;则除第h层外&#xff0c;其他层的结点全部达到最大值&#xff0c;且第h层的所有结点都集中在左子树。 2、满二叉树&#xff1a;满二叉树是一种特殊的的完全二叉树&#xff0c;所有层的结点都是最…

王炸吐血整理60个Redis面试题,全网最全了

1.Redis 是一个基于内存的高性能key-value数据库。 2.Redis相比memcached有哪些优势&#xff1a; memcached所有的值均是简单的字符串&#xff0c;redis作为其替代者&#xff0c;支持更为丰富的数据类型redis的速度比memcached快很多redis可以持久化其数据3.Redis是单线程 redi…

H.266 参考软件VTM下载和安装

1、下载安装cmake &#xff0c;下载地址https://cmake.org/。 安装后打开控制面板-系统-高级系统设置-环境变量-PATH-编辑-输入cmake.exe的路径即可。 2、如果你之前&#xff08;HEVC&#xff09;时已经下载好了SVN&#xff0c;直接在桌面点击右键SVNcheckout&#xff0c;出来…

VTM编码结构框架

VTM流程差不多就是这样子的啦&#xff0c;后续会继续补充&#xff0c;由于能力有限&#xff0c;如有错误&#xff0c;欢迎指正。在后面会进一步分析每一个函数&#xff0c;并分析流程的细节。

AspNetCore应用注意这一点,CTO会对你刮目相看

背景已经有很多文章记录了Web程序中采用异步编程的优势和.Net异步编程的用法&#xff0c; 异步编程虽然不能解决查询数据库的瓶颈&#xff0c; 但是利用线程切换&#xff0c;能最大限度的弹性利用工作线程&#xff0c; 提高了web服务的响应能力。????9012年了&#xff0c;再…

ASP.NET Core如何限制请求频率

ASP.NET Core如何限制请求频率&#xff0c;为了防止恶意请求&#xff0c;我们往往会对接口请求的频率做限制&#xff0c;比如请求间隔&#xff0c;一段时间内请求的次数&#xff0c;针对部分IP做出不同的限制策略如何去限制请求频率不需要我们去实现&#xff0c;用上AspNetCore…

从AppDomain迁移到AssemblyLoadContext

AssemblyLoadContext基本上AssemblyLoadContext是AppDomain的继承者&#xff0c;它提供相同而且更多的功能-除了安全边界&#xff08;隔离&#xff09;。最小的安全边界是进程&#xff0c;因此你将需要使用进程间通信来正确隔离数据和代码执行。官网文档中提到Appdomain已经过时…

【.NET Core 3.0】小技巧 || 原生DI一对多注入

本文是一个技巧文章&#xff0c;内容很短&#xff0c;但是被提问的频率很高&#xff0c;所以记录下来&#xff0c;以待大家不时之需。以下的代码&#xff0c;是通过原生的依赖注入来讲解的&#xff0c;其他的第三方框架&#xff0c;可以自己自定义扩展&#xff0c;效果是一样的…

大话数据结构学习笔记二:算法

一 算法定义 算法是解决特定问题求解步骤的描述&#xff0c;在计算机中表现为指令的有限序列&#xff0c;并且每条指令表示一个或多个操作。 二 算法的特性&#xff1a; 1 输入输出&#xff1a;算法具有零个或者多个输入&#xff0c;至少有一个或者多个输出。 2 有穷性&…

ASP.NET Core 3.0 gRPC 身份认证和授权

一.开头聊骚本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了&#xff0c;以后在实际使用中&#xff0c;可能会发一些经验之文。本文主要讲 ASP.NET Core 本身的认证授权和gRPC接入&#xff0c;认证方式采用目前主流的 JWT 结合 IdentityServer4。二.服务端配置我们…

ASP.NET Core中使用MediatR实现命令和中介者模式

作者&#xff1a;依乐祝原文地址&#xff1a;https://www.cnblogs.com/yilezhu/p/9866068.html在本文中&#xff0c;我将解释命令模式&#xff0c;以及如何利用基于命令模式的第三方库来实现它们&#xff0c;以及如何在ASP.NET Core中使用它来解决我们的问题并使代码简洁。因此…

使用ASP.NET Core 3.x 构建 RESTful API - 3.2 路由

路由机制会把一个请求的URI映射到一个Controller上面的Action&#xff0c;所以当你发送一个HTTP请求的时候&#xff0c;MVC框架会解析这个请求的URI&#xff0c;并尝试着把它映射到一个Controller上面的Action。两个路由中间件在ASP.NET Core 3.x里面&#xff0c;建议使用Endpo…

EFCore批量操作,你真的清楚吗

背景EntityFramework Core有许多新的特性&#xff0c;其中一个重要特性便是批量操作。批量操作意味着不需要为每次Insert/Update/Delete操作发送单独的命令&#xff0c;而是在一次SQL请求中发送批量组合指令。EFCore批量操作实践批处理是期待已久的功能&#xff0c;社区多次提出…