day14.逻辑运算,位运算

逻辑运算,位运算

之前给大家讲了算术运算符,赋值运算符和关系运算符,那今天我们来讲逻辑运算符,位运算符和条件运算符

先进入IDEA创建一个Demo05,写个main方法,我们先从逻辑运算符来看,

逻辑运算里有三总操作:与或非,之前跟大家讲过,

:就是你和我,都要(and &)

:就是你或者我,(or ||)

:就是不是你就是我(取反 !)

我们先定义两个布尔值,一个是一个否,然后分别用与或非分别输出三次,

先写出sout,双引号,a加两个&符号,这是的输出格式,往下复制三行,同理把写出来,的话将与的格式加上感叹号括号的行,如下

在这里插入图片描述

然后我们通过字符串来把它们拼接起来,在最后面的引号加上冒号,引号后面写加号括号,再写上那个格式,说那么多也讲不清楚,直接看图

在这里插入图片描述

然后我们来输出一下,通过结果给大家求出一些分支,我们来看

在这里插入图片描述

逻辑运算

逻辑与运算:两个变量都为真,结果为true

只有变量都是为true,才会输出为true,有一个false就会输出false,都是false也会输出false

只要全是true,就会true,有一个false,就会输出false

逻辑或运算:两个变量一个为真,则结果才为true

两个变量有一个true,就输出true,两个都是true,还是输出true,都是false,才会输出false

只要有true,就会输出true,没true就输出false

逻辑非运算

逻辑非运算:如果是真,则变为假,如果是假,则变为真

都是true,输出为false,都是false,输出为true,

输出出来的结果是相反的,就可以理解为负负得正,

那有人想问了,我三个布尔值得出来的结果是false还是true呢

打个比方a是true,b是false,c是false,d是true,然后我们分别输出两个代码,一个输出a,b,c,一个输出a,b,d,得出来的结果都是false

在这里插入图片描述

这是为什么呢,联想一下初中学的负负得正,同数相乘得正,异数相乘得负,把正数当成true,负数当成false,正数乘以负数再乘以正数得出来的结果为负数,

2乘以**-2**乘以2=负8, true+false+true等于false

负2乘以2乘以负2=负8 false+true+false等于false

得出的结果为负数,false,又因为结果是取反的所以输出为true,用这样的逻辑是不是很好理解,

短路运算

除了这些,还有个东西叫短路运算,在逻辑与运算是两个都为真才会输出true,假设如果b和a的位置调换了,

在这里插入图片描述

程序先检测到d是假的,那就不会计算后面的东西了,这就短路了,b为假就直接输出false了,后面的东西就没有任何意义了

那有人问了,你怎么知道他不会计算后面的东西了,那我们做个试验证明一下

先int c一个5,再设个布尔值d等于c<4,但是这样它就世界输出false,

我们再往后加个&&,让他和c++<10进行比较,再输出c和d,

在这里插入图片描述

得出的结果可以看到为false,这是毫无疑问的,但是c输出的5,并没有变成6,如果c++执行了,那这个5是不是应该+1呀,

可是它没有,这就证明了检测到false就不会执行后面的东西

这就是与或非的逻辑运算,接下来就要讲位运算了

位运算

**位运算:& ,| ,^ ,~ ,>> ,<< ,>>> **

由于位运算它是由一套面试题,所以给大家详细讲解

先创建一个新的class文件,名为Demo06,写个main方法,先写个注释

A = 0011 1100 / B = 0000 1101,这是两个八位二级制

我们先注意位运算的前三个:&,|,^,这三个和逻辑运算的与或非是一样的,但它是单个,所以不要轻易的去用位运算,

我们先看看什么意思

A&B (A与B):跟逻辑与运算很像,它是两排8个数字一个一个比较,只有两个一才得一,01,00都算0

如果对应位都是0,它就是0,对应位1个1,1个0,它还是0,对应为两个1,那它就是1
在这里插入图片描述

得出的结果是:0000 1100,它是根据位来算的

A|B(A或B):跟逻辑或运算很像,跟上同理,

如果对应位都是0,那就是0,如果是1个1,1个0,那它就是1,如果对应位都是1,那它还是1

在这里插入图片描述

得出的结果是:0011 1101,

A^B(异或):AB两者位相同则为0,不同则为1

如果上下都是0,则为0,上下1个1,1个0,那就是1,上下都是1,那还是0

在这里插入图片描述

A~B(取反):跟逻辑非运算很像,是相反的,

你0它就1,你是0000,它就是1111

这些大家应该了解吧,接下来引出一道面试题,2*8怎么运算最快,大家都知道是16,但是计算机不知道,它要在底层做非常多的运算,2X2X2X2,这样很麻烦

这时候看到上面的:>> << 这两个符号,叫左移右移,箭头指那边就往那边移,

这时候我们输出一下,2左移三位,看看结果会不会等于16

在这里插入图片描述

可以看到结果是16,而为运算最神奇的地方在这里

我们的数字字母符号都是由最根本的二进制,就比如说0在二进制就是代表0000 0000,一的话是0000 0001,二就是0000 0010,如下:

在这里插入图片描述

而左移右移的意思呢,就是把1往右或者左移一位,看图,8要跳到16,就是左移一位,就是我们刚才输出的,是同一个意思,同理,8想变成4,最快的方法就是往右移一位

左移就相当于把数字乘以2,右移就相当于把数字除以2

这个要很牢的记在心里,因为很多底层算法都需要用到位运算,位运算的好处就效率高,它是直接跟底层打交道的,直接用二进制进行计算的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值