通过位运算将指定位的值置0或1

问题样例

假如现在有一个8bit二进制数A,其可以为任何值,所以这里不妨先设A=(xxxxxxxx)2,{x|0,1}

现在需要你将A的几个指定位修改为1或0,例如将A修改为(x1x1xx00)2

要解决这个问题我们只需要用到与、或两种位运算


与运算的性质

与运算的真值表如下

a b a&b
0 0 0
0 1 0
1 0 0
1 1 1

其内容很好总结,就相当于乘法中 “任何数乘0都得到0,两数都不为0时才得到非0”

与运算也是任何数与上0都得到0,两数都不为0时才得到非0,因此与运算也称作逻辑乘


或运算的性质

与运算的真值表如下

a b a|b
0 0 0
0 1 1
1 0 1
1 1 1

从真值表来看,或运算就相当于无符号数加法

任何数或上1都得到1,两数都为0时才为到0,因此或运算也称作逻辑加


解决过程

1、用与运算将指定位置0

利用与运算中 ”任何数与0都得到0“ 这个性质,我们可以用与运算将指定位修改为0

将A修改为(xxxxxx00)2,是要让最后两位置0

所以我们构造一个数字B,让其最后两位为0,其他不变的位都为1,B=(11111100)2

最后A&B得到(xxxxxx00)2

2、用或运算将指定位置1

那么我们的第二步的做法就很明显了

根据或运算的 ”任何数或上1都得到1“ 这个性质,我们可以用或运算将指定位修改为1

同样是根据要修改的位构造数字B,这次是要将置1的位设1,不变的位设0

所以B=(01010000)2,最后A|B得到(x1x1xxxx)2

这样两步下来之后我们便成功将A=(xxxxxxxx)2变为了(x1x1xx00)2

本文编辑于2022年10月22日

最近修改于2022年11月5日

通过位运算修改指定bit位的值的更多相关文章

  1. 利用Entity Framework修改指定字段中的值

    利用Entity Framework修改指定字段中的值一般我们编辑某些模型的时候会用到类似这样的代码: [HttpPost] public ActionResult Edit(Article mode ...

  2. jave 逻辑运算 vs 位运算 + Python 逻辑运算 vs 位运算

    JAVA中&&和&.||和|(短路与和逻辑与.短路或和逻辑或)的区别 博客分类: 面试题目 Java.netBlog  转自 :http://blog.csdn.net/web ...

  3. 小A的位运算-(前缀和+位运算)

    https://ac.nowcoder.com/acm/contest/549/D 题意:从N个数里面选出N-1个数要让它们或起来的值最大. 解题: 假设n个数分别存在a数组里. 从左到右连续或运算结 ...

  4. NumPy 位运算

    NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操作 b ...

  5. C/C++中的位运算

    位运算     位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有:     &(按位与).|(按位或) ...

  6. STL+位运算的文件

    1.queue 队列 queue的头文件是<queue>. 定义queue对象的示例代码如: queue<int>q;  队列内存放的是int类型的数 queue<dou ...

  7. java位运算应用

    位移动运算符: <<表示左移, 左移一位表示原来的值乘2. 比如:3 <<2(3为int型)  1)把3转换为二进制数字0000 0000 0000 0000 0000 000 ...

  8. 一文了解有趣的位运算(&、|、^、~、>>、<<)

    1.位运算概述 从现代计算机中所有的数据二进制的形式存储在设备中.即0.1两种状态,计算机对二进制数据进行的运算(+.-.*./)都是叫位运算,即将符号位共同参与运算的运算. 口说无凭,举一个简单的例 ...

  9. 10、numpy——位运算

    NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操作 b ...

  10. POJ 1166 The Clocks [BFS] [位运算]

    1.题意:有一组3*3的只有时针的挂钟阵列,每个时钟只有0,3,6,9三种状态:对时针阵列有9种操作,每种操作只对特点的几个时钟拨一次针,即将时针顺时针波动90度,现在试求从初试状态到阵列全部指向0的 ...

随机推荐

  1. [BUUCTF][Web][极客大挑战 2019]Secret File 1

    打开靶机对应的url 右键查看网页源代码,查看到一个访问路径 /Archive_room.php 构造url访问一下 http://3bfaebad-fdfa-4226-ae0a-551f0228be ...

  2. .NET高级调试之sos命令输出看不懂怎么办

    一:背景 1. 讲故事 很多.NET开发者在学习高级调试的时候,使用sos的命令输出会发现这里也看不懂那里也看不懂,比如截图中的这位朋友. .NET高级调试属于一个偏冷门的领域,国内可观测的资料比较少 ...

  3. ContentType组件表使用

    https://www.shuzhiduo.com/A/qVdepN2r5P/

  4. 【Azure 应用服务】azure function powershell 调用 New-AzADServicePrincipal -DisplayName $sp -PasswordCredential $spCred

    问题描述 powershell 调用New-AzADServicePrincipal -DisplayName $sp -PasswordCredential $spCred,出现如下错误: Reso ...

  5. 【Azure Developer】使用Azure Resource Graph的查询语法的示例

    文章"[Azure Developer]在Azure Resource Graph Explorer中查看当前订阅下的所有资源信息列表并导出(如VM的名称,IP地址内网/公网,OS,区域等) ...

  6. C++ 模板的笔记1

    C++模板的笔记1 C++ 函数模板 函数模板的定义 函数模板是一种可以生成不同类型函数的函数声明.函数模板的参数类型不是固定的,而是在调用时由实参类型推导出来. 语法: template <t ...

  7. git的 .gitignore 配置概述

    git的 .gitignore 配置概述 学习背景:自己在使用git时发现有时会上传很多无用的配置文件,或者在项目中已经包含一个本地的git仓库,导致上一级项目上传总是报错,所以学习采用gitigno ...

  8. ImageClipboard js粘贴剪切板图片,已测试,可用,可获得base64

    ImageClipboard js粘贴剪切板图片,已测试,可用,可获得base64 具体用到自己项目的时候,拿源码改成自己的库,从写一遍 3个小问题 onpaste 执行了两遍,一次是图片加载完成,一 ...

  9. nest.sh 脚本 发布服务

    每次发布后端nest 直接执行一个脚本即可 给脚本赋值权限 chomd 777 nest.sh nest.sh 脚本 #!/bin/bash cd /root/gateway-study git pu ...

  10. aardio 代码格式化 自动保存 自定义 ctrl + s bug:这个快捷键是全局拦截

    aardio 代码格式化工具 https://gitee.com/pengchenggang/aardio---code-formatting-tool 修改内容 1 代码进行了一定的修改,默认ctr ...