二进制、位运算和掩码运算,小白鼠测试示例

news2025/1/16 20:19:49

1. 二进制

二进制是一种基于两个数字0和1的数制系统。它可以表示两种状态,即开和关。所有输入电脑的任何信息最终都要转化为二进制。目前通用的是ASCII码。最基本的单位为bit。
在计算机科学中,二进制是最常用的数制系统,因为计算机内部的所有数据都是以二进制形式存储和处理的。

在二进制中,每个数字位被称为一个比特(bit),它可以是0或1。比特的位置从右到左依次递增,每个位置的值是2的幂。比如,最右边的比特的权重是20,即1;第二个比特的权重是21,即2;第三个比特的权重是2^2,即4,依此类推。

使用二进制,可以表示和处理各种数据,包括整数、小数、字符和图像等。例如,整数10可以表示为二进制的1010,其中的1代表相应的位为1,0代表相应的位为0。

二进制还可以进行各种运算,包括加法、减法、乘法和除法等。这些运算和十进制的运算类似,只是使用的数码是0和1而已。

2. 位运算

二进制位运算是对二进制数进行逐位的逻辑运算,包括位与(&)、位或(|)、位异或(^)、位取反(~)等操作。

2.1 二进制位运算符及其示例

  1. 与运算(&):两个相应位上的数字都为1时,结果为1,否则为0。
    示例:
   1101 & 1011 = 1001
  1. 或运算(|):两个相应位上的数字中只要有一个为1时,结果为1,否则为0。
    示例:
1101 | 1011 = 1111
  1. 异或运算(^):两个相应位上的数字不同则结果为1,相同则结果为0。
    示例:
1101 ^ 1011 = 0110
  1. 非运算(~):对一个二进制数的每个位取反。
    示例:
~1101 = 0010
  1. 左移运算(<<):将一个二进制数的所有位向左移动指定的位数。
    示例:
1101 << 2 = 10100
  1. 右移运算(>>):将一个二进制数的所有位向右移动指定的位数。
    示例:
1101 >> 2 = 0011

3. 二进制示例之试毒小白鼠

二进制很强大,在某些方面有着很显著的作用,以下是一个关于二进制的小栗子:

  • 老鼠试毒

在这里插入图片描述
问题:
有100瓶水,其中有一瓶有毒,小白鼠只要尝到带毒的水24小时后就会死亡,问至少要多少只小白鼠才能在24小时后鉴别出哪瓶水有毒?
答:
按道理来说,应该是100只,肯定是能鉴别出来的。但问题是至少要多少只可以鉴别出,求最少,所以肯定不能直接填写100.

这里借助二进制运算就可以巧妙的解决此问题。

这样,先将问题简化一下:假设只有8瓶水,其中1瓶有毒,如下:
在这里插入图片描述
设给水编个号(根据二进制计算):
在这里插入图片描述
经过矩阵转置,变为:
在这里插入图片描述
找来四只小白鼠,按照水号的顺序,分别给小白鼠命名为1号鼠嘉宾、2号鼠嘉宾、3号鼠嘉宾、4号鼠嘉宾。
依次喝对应水号的水,观察24小时,根据状态(死亡为1,活着为0)查找上图中的对应的数字,然后将二进制转换成十进制,可以得出哪瓶水是有毒的。
在这里插入图片描述
因此,当有8瓶水,其中一瓶有毒时,仅仅只需要4只小白鼠就可以测出哪瓶是有毒的。
将话题扩大到100瓶水。
2的6次方是64,2的7次方是128.因此按照上面的算法,可以得出,需要7只小白鼠。
设(每瓶水一个不同的编号):
在这里插入图片描述
矩阵转置:
在这里插入图片描述
接下来就是小白鼠和对应的水,根据小白鼠的生存状态,可以得出哪瓶水有毒。
在这里插入图片描述

4. 掩码运算

掩码操作是指利用位运算符对特定位置的二进制位进行设置或清除。

  1. 设置某一位置为1:使用位或运算符(|)将要设置的位和当前值进行位或操作。
    例如,将第3位设置为1:
int value = 4;  // 二进制表示为00000100
value = value | (1 << 2);  // 将第3位设置为1,结果为00000100 | 00000100 = 00000100
  1. 清除某一位置为0:使用位与运算符(&)将要清除的位取反后和当前值进行位与操作。
    例如,将第5位清除为0:
int value = 22;  // 二进制表示为00010110
value = value & ~(1 << 4);  // 将第5位清除为0,结果为00010110 & 11101111 = 00000110
  1. 切换某一位置的值:使用位异或运算符(^)将要切换的位和当前值进行位异或操作。
    例如,切换第2位的值:
int value = 10;  // 二进制表示为00001010
value = value ^ (1 << 1);  // 切换第2位的值,结果为00001010 ^ 00000010 = 00001000
  1. 检查某一位是否为1:使用位与运算符(&)将要检查的位和当前值进行位与操作,判断结果是否为0。
    例如,检查第7位是否为1:
int value = 127;  // 二进制表示为01111111
int mask = 1 << 6;  // 设置掩码为第7位的1,即01000000
int result = value & mask;  // 结果为01111111 & 01000000 = 01000000
if(result != 0) {
    // 第7位为1
} else {
    // 第7位为0
}

5. 取某几位掩码

有两种方式取第几位到第几位的掩码:

  • 方法一:
// 比如取第3位到第7位的掩码,就是设置第3位到第7位为1
// 掩码: 11111000
// 往左偏移7+1位 - 往左偏移3位 = 7-3位都是1
int mask = (1 << 8) - (1 << 3);

为了验证结果是否是正确的,直接输出"11111000"的转换为10进制的值:
image.png

  • 方法二:
    使用bitset
	// 需引入头文件<bitset.h>
    std::bitset<8> mask(0);
    for(int i = 0; i < mask.size(); ++i)
    {
        if( i <= 7 && i >= 3)
        {
            mask[i] = 1;
        }
    }
    std::cout << mask << std::endl;

结果如下:
image.png

6. 结论

位运算符可以用于执行各种操作,例如掩码操作、位清零、位设置、位翻转等。
在实际编程中,位运算常用于位操作、优化算法和处理二进制数据等场景,能够提高效率和灵活性。

明天就要见对方家长了,好忐忑啊,毕竟是我先打的他们家小孩

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

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

相关文章

【MySQL】主从异步复制配置

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

解锁大数据世界的钥匙——Hadoop HDFS安装与使用指南

目录 1、前言 2、Hadoop HDFS简介 3、Hadoop HDFS安装与配置 4、Hadoop HDFS使用 5、结语 1、前言 大数据存储与处理是当今数据科学领域中最重要的任务之一。随着互联网的迅速发展和数据量的爆炸性增长&#xff0c;传统的数据存储和处理方式已经无法满足日益增长的需求。…

LabVIEW在大型风电机组状态监测系统开发中的应用

LabVIEW在大型风电机组状态监测系统开发中的应用 风电作为一种清洁能源&#xff0c;近年来在全球范围内得到了广泛研究和开发。特别是大型风力发电机组&#xff0c;由于其常常位于边远地区如近海、戈壁、草原等&#xff0c;面临着恶劣自然环境和复杂设备运维挑战。为了提高风电…

C语言函数篇——scanf()函数介绍

好的&#xff0c;让我们以输入/输出函数中的scanf()为例&#xff0c;来详细介绍并展示其应用案例。 scanf()函数介绍&#xff1a; scanf()函数是C语言中用于从标准输入&#xff08;通常是键盘&#xff09;读取数据的函数。它可以从用户处获取各种类型的数据&#xff0c;并将其…

11|代理(上):ReAct框架,推理与行动的协同

11&#xff5c;代理&#xff08;上&#xff09;&#xff1a;ReAct框架&#xff0c;推理与行动的协同 在之前介绍的思维链&#xff08;CoT&#xff09;中&#xff0c;我向你展示了 LLMs 执行推理轨迹的能力。在给出答案之前&#xff0c;大模型通过中间推理步骤&#xff08;尤其…

QT上位机开发(倒计时软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 倒计时软件是生活中经常遇到的一种场景。比如运动跑步&#xff0c;比如学校考试&#xff0c;比如论文答辩等等&#xff0c;只要有时间限制规定的地…

电影《海王2》观后感

上周看了电影《海王2》&#xff0c;整体特效和打斗还是非常不错的&#xff0c;自己在写文章的时候&#xff0c;看完电影已经一周了&#xff0c;相当于是叙事自我在描述这段经历。 &#xff08;1&#xff09;体验自我VS叙事自我 首先简单说明下“体验自我”和“叙事自我”&…

Redis经典五大类型源码及底层实现(二)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

Cuk、Zeta和Sepic开关电源拓扑结构

Cuk、Zeta和Sepic变换器,三种拓扑结构大致类似。不同点在于电感和二极管&#xff0c;MOS管的位置关系的变化。 Cuk电源是一种非隔离的直流电源转换器&#xff0c;其基本结构包括输入滤波电容、开关管、输入电感、输出电感和输出电容等元件。Cuk电路可以看作是Boost和Buck电路的…

【CFP-专栏2】计算机类SCI优质期刊汇总(含IEEE/Top)

一、计算机区块链类SCI-IEEE 【期刊概况】IF:4.0-5.0, JCR2区&#xff0c;中科院2区&#xff1b; 【大类学科】计算机科学&#xff1b; 【检索情况】SCI在检&#xff1b; 【录用周期】3-5个月左右录用&#xff1b; 【截稿时间】12.31截稿&#xff1b; 【接收领域】区块链…

基于轻量级GhostNet模型开发构建生活场景下生活垃圾图像识别系统

轻量级识别模型在我们前面的博文中已经有过很多实践了&#xff0c;感兴趣的话可以自行移步阅读&#xff1a; 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》 《基…

Dragonfly-SM X9H核心板 SM6700Q PMIC供电配置烧录介绍

一、概述 核心板采用 1 片芯迈 SM6700Q PMIC 芯片搭配 3 片 MPQ8861 DCDC 电源芯片和 2 片安森美 LDO&#xff0c;型号分别 NCV8164ASN180T1G 和 NCV8130BMX080TCG 为系统供电。 二、核心板供电框图 系统供电主要是 MCU 的 RTC 域、安全域、应用域的供电&#xff0c;其中 RTC 域…

数据库中的锁

锁 锁冲突是针对事务的&#xff0c;另一个事务能不能申请上锁&#xff0c;是和其他事务竞争。 一个事务内部可以加很多锁&#xff0c;互相并不会冲突。 级联回滚调度 多个事务有依赖关系&#xff0c;如果一个事务回滚&#xff0c;那么所有事务也需要回滚。 冲突的数据加锁安…

118基于matlab的二级倒立摆的数学建模

基于matlab的二级倒立摆的数学建模&#xff0c;引入二次型最优控制率&#xff0c;对系统进行仿真分析&#xff0c;得出摆杆及小车位置变化曲线。程序已调通&#xff0c;可直接运行。

计算机网络——计算大题(七)

前言&#xff1a; 最近也是在准备计算机考试&#xff0c;我们的考试形式是上机考试&#xff0c;所以可能有些计算题是会给提供思路的&#xff0c;前面已经对本学期的计算机网络知识有了一个简单的认识与了解&#xff0c;现在我们就来对计算大题进行一个学习吧&#xff0c;这里的…

【Apache Doris】自定义函数之 JAVA UDF 详解

【Apache Doris】自定义函数之 JAVA UDF 详解 一、背景说明二、原理简介三、环境信息3.1 硬件信息3.2 软件信息 四、IDE准备五、JAVA UDF开发流程5.1 源码准备5.1.1 pom.xml5.1.2 JAVA代码 5.2 mvn打包5.2.1 clean5.2.2 package 5.3 函数使用5.3.1 upload5.3.2 使用 六、注意事…

Zookeeper无法启动,报“Unable to load database on disk”

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 测试环境部署zookeeper的服务器磁盘满了&#xff0c;引起服务异常&#xff0c;将zookeeper进程杀掉之后&…

【shell】命令行自动补全(compgen、complete、compopt)

目录 用途 小例子 说明 进阶-多级补齐 Bash自动补齐原理 用途 自编写的Shell脚本/命令&#xff0c;很多时候都需要输入一定的参数。当参数较多而且较复制的时候&#xff0c;如果能使用Tab键补全就显得非常的便利。 小例子 例如&#xff0c;我们自定义一个命令 footest function…

通信原理课设(gec6818) 007:语音识别

目录 1、去科大讯飞官网下载对应的sdk 2、科大讯飞文件夹的意思 3、配置ARM的录音环境 4、编程实现语音识别 我们的需求是将一个语音文件从客户端传到服务器&#xff0c;因此我们最好是选用tcp 现在市面上面常用的语音识别解决方案为&#xff1a;科大讯飞c和百度c 离…

机器学习归一化和标准化

1. 为什么做归一化和标准化 样本中有多个特征&#xff0c;每一个特征都有自己的定义域和取值范围&#xff0c;他们对距离计算也是不同的&#xff0c;如取值较大的影响力会盖过取值较小的参数。因此&#xff0c;为了公平&#xff0c;样本参数必须做一些归一化处理&#xff0c;将…