位置:重庆少儿编程培训学校 > 学校动态 > 核酸检测中的逻辑和位运算
较近这段时间,都算是严阵以待。
现在的核酸检测已经从单独检测变成了10混1的混合检测。能更加适合在大规模人群中尽可能地筛查出感染人员。
也就是说一旦检测出阳性,则立马对这十人进行单独隔离和检测。
如果老师用计算机的角度去看待这个问题,将情况换做真假值(True of False)与逻辑运算,令阳性为T,阴性为F,则较终的核酸检测结果是10个TF或起来的结果——只要任意一人出现T,则真就判定结果就是T。
所以今天就来讲一讲计算机的逻辑运算。
计算机的逻辑运算
主要有三类:&&(且),||(或),!(非)
与生活中的描述基本一致,且则表明需要同时满足:例如外面天气没下雨且操场开放且我没生病,我就出去跑步。否则我就在家休息。
而或表明只需要满足其中之一即可。外面天气下雨或者操场不开放或者我生病了,我就在家休息。否则就出门跑步。
而非则表示下面的内容全部取反,真变假,假变真。其实很明显看到,小毕老师我刚刚举的两个跑步的例子就是if的内部是完全相反的,实际上就是一个取反过程,也就说:
当然。我们知道目前来说,计算机的真假值可以以0和1来表示。所以也就是一个个的0和1进行了且或非的运算。
实际上计算机还有一个更加类似,但是又有些许不一样的运算。专门处理一连串的01的运算方式。叫做位运算。
计算机的位运算
当然首先我们要明白一点,一连串的01是什么。
例如0101,本质上来说,我们认为是一个数字的二进制表示,也就是这个数字本身是十进制下的5。(如果对进制转换有疑惑的可以查看以前的文章)
那么位运算的本质,实际上是一连串01,然后按照每一位做且或非的运算。
位运算下的且是&,或是|,非是~。
例如0101 & 1011:
每一位做类似的逻辑运算且即可。相应的或与非也是类似,都是对于每一位的操作,所以叫位运算。
接下来我们再来介绍一个位运算,也是今天的重点。
计算机的位运算——异或
异或运算,操作符为:^。
异或简单描述为,相同为0,相异为1。
(注意位运算,是每一位互相运算)
那异或有什么用呢?我们可以来看下面这个式子:
也就是说,两个相同的数字,异或的结果为0。
然后我们再看一下与0异或的结果。
因为1与0异或结果为1,0与0异或结果为0。那么,任何数字x与0异或都是x它本身ok,现在小毕老师便提出一个问题。
问题——公寓筛查
公寓核酸检测,每次登记检测用户的房间号,总共有n个人,故一次核酸检测会登记n个房间号。第二轮核酸检测后发现只检测了n-1名住户,现只知道前两轮的登记情况,问谁未做核酸检测。
简单描述一下,现在有2*n-1个数字,其中有n-1个数字出现了2次,有1个数字只出现了1次,找出只出现了一次的数字。
解决
实际上这是异或的经典问题。因为除了目标数字之外,其他数字都只出现了2次。而出现两次的数字异或结果为0,0异或其他数值均为其他值。所以把所有数字异或后的结果,即为只出现了一次的数字。
这边可以类比成两个相同的数字在异或下就等价于加法下的相反数,一操作就抵消了。所以较后剩下的数字就是只出现了一次的数字。
代码
尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/168/news/588815/违者必究! 以上就是重庆少儿编程培训学校 小编为您整理 核酸检测中的逻辑和位运算的全部内容。