通过位运算将指定位的值置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. 解密C语言选择结构:掌握条件语句与分支逻辑的利器

    欢迎大家来到贝蒂大讲堂 养成好习惯,先赞后看哦~ 所属专栏:C语言学习 贝蒂的主页:Betty's blog 引言 C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构.选择结构.循环结构.为什么有 ...

  2. 最简最快了解RPC核心流程

    本文主要以最简易最快速的方式介绍RPC调用核心流程,文中以Dubbo为例.同时,会写一个简易的RPC调用代码,方便理解和记忆核心组件和核心流程. 1.核心思想 RPC调用过程中,最粗矿的核心组件3个: ...

  3. 如何配置WebStorm开发Chrome插件项目

    开发Chrome插件项目,在调用Chrome的相关接口时,默认情况下WebStorm是不会有任何提示的,这对于开发者特别是新手特别不友好. 因此,需要IDE能支持Chrome接口调用时的智能提示. 如 ...

  4. Redis居然还有比RDB和AOF更强大的持久化方式?

    https://cloud.tencent.com/developer/article/1786055

  5. java中sha1.md5,base64到底怎么回事

    MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.MD5用的是哈希函数,在计算机网络中应用 ...

  6. Swoft - Bean

    一.Bean 在 Swoft 中,一个 Bean 就是一个类的一个对象实例. 它(Bean)是通过容器来存放和管理整个生命周期的. 最直观的感受就是省去了频繁new的过程,节省了资源的开销. 二.Be ...

  7. chatGPT初体验

    chatGPT NLP技术,通过统计的手段模拟出更正确的答案. 他与以前的NLP不一样,他有上下文语义,他能够模拟场景,能够总结很多文章信息. 因此对于谷歌等搜索引擎就很有攻击性了,因为chatGPT ...

  8. 使用@RequestBody注解踩的坑

    一.问题由来 最近在和前端调试一个自己写的接口时,频频出现问题,让我很是烦恼.因此写下这篇博文来记录开发中遇到的一些问题.第一个问题是 前端页面传递参数后,后台不能正常接收参数.我写好接口以后,通过s ...

  9. Centos挂在U盘的时候无法挂载

    网上的教学视频大部分全是以centos为教材底子--没办法更换系统了,这样方便麻! 我参考的文章: https://blog.csdn.net/shengjie87/article/details/1 ...

  10. day10-中文乱码处理

    中文乱码处理 1.问题抛出 当表单提交的数据为中文时,会出现乱码: (1)Monster.java: package com.li.web.datavalid.entity; import org.h ...