基础拾遗:除了&和&&的区别,你还要知道位运算的这5个运算符


前文传送门,dotNET开发基础汇总系列
StackOverflow 20万阅读的问题:如何实现异步Task超时的处理
Func和Action委托简单用法
C#异步编程基础入门总结
C#泛型入门学习泛型类、泛型集合、泛型方法、泛型约束、泛型委托
C#异常处理总结
Try-Catch无法正确定位异常位置,我推荐2个有效技巧

01 前言

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

02 &和&&的区别

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

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

总结

  • &是位运算,返回结果是int类型

  • &&是逻辑运算,返回结果是bool类型 what are doing?

读者黑人问号:我工作三年,你就告诉这点东西,这不是浪费我点击来阅读的流量费?

640?wx_fmt=jpeg

03 位运算的使用

直接进入主题位运算,这篇文章本身没有任何难度,工作中甚至用不到位运算,埋个伏笔:
在掌握位运算之前,应该明确位运算的两个概念。

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

  • Q2:云运算的结果是什么?结果是整型
    常见的5个位运算符

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

3.1 位逻辑与运算:&

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

1&1=1
0&1=0
0&0=0

如图:640?wx_fmt=png15的二进制是(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
15&20 结果:
 0000 0000 0000 0100

3.2 位逻辑或运算:|

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

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

如15|20的结果计算结果就是31
640?wx_fmt=png

0000 0000 0000 1111
0000 0000 0001 0100
15|20结果
0000 0000 0001 1111

3.3 位逻辑异或运算: ^

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

1异或1等于0
1异或0等于1
0异或0等于0

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

 0000 1111150001 01002015^20运算后的结果
 0001 101127

3.4 位逻辑左移运算<<

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

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

0000 0000 0000 1111
15>> 左移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次方

3.5 位逻辑右移运算 >>

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

0000 111115)
左移3位结果是:
0000 00013

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

04 位运算还能干嘛

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

  • 如将一个月的签到记录保存到1个int类型中

  • 判断奇偶数

  • 权限设置,增删改查4个操作,合并成一个整型

  • 交换两个数

  • 计算2的3次方最高效就是用位运算左移<<

  • 计算a的b次方

  • 一组整型数据,找出没有重复的数

关于其他的一些基础知识概念的总结:
位、字节、字符(英文字母)、汉字、KB、MB、GB、TB的关系

  • 位:bit,也叫比特位,是计算机表示数据最小的单位,用二进制0和1来存储
  • 字节:byte,1byte(1B)=8b,一个字节=8位
  • 字符:char,1char=2byte=16b,1个字符=2个字节=16位
  • KB,1KB=1024byte(1024B)
  • MB,1MB=1014KB
  • GB,1GB=1024MB
  • TB,1TB=1024GB
  • 一个汉字占两个字节,也就是32位,一篇1000字的文章,大概就是32*1000 的二进制0或1 。
  • 一个10M的短视频,也就是10M=1024KB10=1024字节1010=1024b10108
    大概就是919200个二进制的0和1了
  • short 是16位,int是32位,long是64位KB,1KB=1024byte(1024B)
    short 、int 、long之间能组合、互转吗?
    其他的一些实际操作的链接,看往期,写的比较乱,见谅!
    C#位运算使用场景之操作整型某一位
    C#位运算实际运用

作者信息
【文章信息】:作者-张林:原文链接-https://blog.csdn.net/kebi007/article/details/103175193
【原创公众号】:dotNet全栈开发。好文目录
版权声明:本文为CSDN博主「dotNet全栈开发」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

发布了126 篇原创文章 · 获赞 4790 · 访问量 164万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览