【算法】位运算——常见位运算基础操作总结

位运算基础操作总结,包括基础运算符 + 修改某位bit位

目录

  • 1.基础位运算符
  • 2.按位基础操作
    • 1.给一个数 n,确定其二进制的第 x 位是 0/1
    • 2.将一个数 n 的二进制标识的第 x 位修改成 1
    • 3.将一个数 n 的二进制标识的第 x 位修改成 0
    • 4.提取一个数 n 二进制中最右侧的 1 (除了最右侧的1,即其他位都置为0)
    • 5.干掉一个数 n 二进制标识中最右侧的 1
    • 6.按位异或^的运算律
  • 3.相关思想及运算符优先级问题
    • 位图思想
    • 优先级

1.基础位运算符

基础位运算符有6个,即<<,>>,~,&,|,^

  • << 左移
  • >> 右移
  • ~ 按位取反:全部bit位按位取反(0->1,1->0),包括符号位
  • & 按位与:有0为0
  • | 按位或:有1为1
  • ^ 按位异或:异为1,同为0 或 (无进位相加)

2.按位基础操作

按位基础操作总计有6点,下面依次进行叙述。

1.给一个数 n,确定其二进制的第 x 位是 0/1

公式:ret = (n >> x) & 1
原理:利用与运算,任何数与1进行按位与都是其数本身,任何数与0按位与都是0
图解:
在这里插入图片描述
代码示例:

//1.给一个数 n,确定其二进制的第 x 位是 0/1
void test1()
{int n = 106;// 0 1 1 0 1 0 1 0int x = 0;for (int i = 0; i < 8; i++){x = i;int ret = (n >> x) & 1;printf("n的第%d位(从右往左数)是%d\n", x, ret);}
}

效果展示:
在这里插入图片描述

2.将一个数 n 的二进制标识的第 x 位修改成 1

公式:ret = n | (1 << x)
原理:利用或运算,0或上任何数都是原数,1或上任何数都为1
图解:
在这里插入图片描述
代码示例:

//2.将一个数 n 的二进制标识的第 x 位修改成 1
void test2()
{int n = 106;// 0 1 1 0 1 0 1 0int x = 0;for (int i = 0; i < 8; i++){x = i;int ret = n | (1 << x);printf("将n的第%d位修改为1是%d\n", x, ret);}
}

效果展示:
在这里插入图片描述

3.将一个数 n 的二进制标识的第 x 位修改成 0

公式:ret = n & ~(1 << x)
原理:利用与运算,任何数与1进行按位与都是其数本身,任何数与0按位与都是0
图解:
在这里插入图片描述
代码示例:

//3.将一个数 n 的二进制标识的第 x 位修改成 0
void test3()
{int n = 106;// 0 1 1 0 1 0 1 0int x = 0;for (int i = 0; i < 8; i++){x = i;int ret = n & (~(1 << x));printf("将n的第%d位修改为0是%d\n", x, ret);}
}

效果展示:
在这里插入图片描述

4.提取一个数 n 二进制中最右侧的 1 (除了最右侧的1,即其他位都置为0)

公式:n & (-n)
原理:先利用 -n全部取反且+1,此时-n与n的相同二进制位为最右侧的1及其右边的二进制位(但是只有最右侧的1是1,最右侧的右侧二进制都是0)。再利用按位与不同为0,同1为1。
图解:
在这里插入图片描述
代码示例:

//4.提取一个数 n 二进制中最右侧的 1(除了最右侧的1,即其他位都置为0)
void test4()
{int n = 106;// 0 1 1 0 1 0 1 0int ret = n & (-n);printf("提取最右侧二进制位后的数值为:%d\n", ret);
}

效果展示:
在这里插入图片描述

5.干掉一个数 n 二进制标识中最右侧的 1

公式:ret = n & (n-1)
原理:n-1与n的区别在于最右侧的1因为被“借位”不见了,其最右1的右边均不同(总之有0),此时再利用按位与的同为原数,不同为0的特点即可。
图解:
在这里插入图片描述

代码示例:

//5.干掉一个数 n 二进制标识中最右侧的 1
void test5()
{int n = 106;// 0 1 1 0 1 0 1 0int ret = n & (n - 1);printf("将n的最右侧二进制位1修改为0是:%d\n", ret);
}

效果展示:
在这里插入图片描述

6.按位异或^的运算律

我们知道:对于按位异或而言,异为1,同为0
那也就是说,1 ^ 0 = 1 ; 0 ^ 0 = 0 ; 1 ^ 1 = 1;
我们将这个规律推广到数的层级(8个比特位),该规律依旧存在于数的层级上。
即:
1.num ^ 0 = num ;
2.num ^ num = 0;
3.a ^ b ^c = a ^ c ^ b;

3.相关思想及运算符优先级问题

位图思想

与哈希表相类似,只不过里面存的值变成了单个bite位,这个并不在这里进行详细解释。

优先级

运算符优先级不一样,可能会导致符号运算顺序不满足我们预期。
解决:不确定就加括号

当然,我下面也提供了符号优先级表格,可以了解一下常用的几个:

在这里插入图片描述


EOF

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

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

相关文章

记录一次flink代码优化

背景介绍 业务中有用到flink读取mysql数据,然后实时处理回写到mysql和doris供c端使用,代码的大体逻辑都是1.创建执行环境2.写需要使用到表的flinksql ddl语句3.通过flink sql 写核心的业务逻辑4.将sql处理的结果通过toRetractStream来转换成一个可撤回流5.对这个流进行其他处理…

什么是住宅IP代理?为什么需要家庭 IP 代理

家庭代理 IP 允许您选择特定位置&#xff08;国家、城市或移动运营商&#xff09;并作为代理上网该区域的真实用户。住宅代理 IP 可以定义为保护用户免受一般网络流量影响的中介。它们在隐藏您的 IP 地址的同时充当缓冲区。住宅代理 IP 是服务提供商分配给用户的替代 IP 地址。…

EasyCode生成的SQL语句中无逗号分隔

EasyCode生成的SQL语句中无逗号分隔 EasyCode是一款非常好用的插件&#xff0c;可以帮助我们生成相关的一些代码&#xff0c;但是在生成SQL对应的xml文件之后&#xff0c;发现语句中多个字段之间没有逗号分隔&#xff0c;而是直接连在了一起。接下来&#xff0c;让我们一起去解…

Vue如何实现鼠标悬浮时,展示与隐藏弹窗的功能

如果你需要鼠标在元素和弹窗上时保持弹窗显示&#xff0c;而鼠标离开这两者时隐藏弹窗&#xff0c;你可以使用一个稍微复杂的逻辑来处理鼠标的进入和离开事件。 这通常涉及到延时关闭弹窗&#xff0c;以便给用户足够的时间从元素移动到弹窗上&#xff0c;而不触发弹窗关闭。以…

【论文解读】Performance of AV1 Real-Time Mode

论文下载地址:Performance of AV1 Real-Time Mode 时间:2020.10 级别:IEEE 作者:Ludovic Roux 摘要 背景:COVID-19疫情增加了对数字互动的需求,使得实时或低延迟编解码器变得更加重要。现状:大多数编解码器,包括AV1,主要关注于编码效率,这是视频点播(VOD)的主要改…

授人以渔 选购篇十四:电动车(电动自行车)选购要点

文章目录 系列文章新国标和上牌电池&#xff1a;锂电池电机&#xff1a;无刷直流电机刹车&#xff1a;优选前后双碟刹轮胎&#xff1a;真空轮胎品牌其他 系列文章 授人以渔 选购篇一&#xff1a;信用卡选购要点 授人以渔 选购篇二&#xff1a;冰箱选购要点 授人以渔 选购篇三&…

【传知代码】私人订制词云图-论文复现

文章目录 概述原理介绍核心逻辑1、选取需要解析的txt文档2、选取背景图明确形状3、配置停用词4、创建分词词典&#xff0c;主要解决新的网络热词、专有名词等不识别问题 技巧1、中文乱码问题&#xff0c;使用的时候指定使用的文字字体2、更换背景图3、词库下载以及格式转换方式…

多线程编程(12)之HashMap1.8源码分析

之前已经分析过了一版1.7版本的HashMap&#xff0c;这里主要是来分析一下1.8HashMap源码。 一、HashMap数据结构 HashMap 是一个利用散列表&#xff08;哈希表&#xff09;原理来存储元素的集合&#xff0c;是根据Key value而直接进行访问的数 据结构。 在 JDK1.7 中&#xff…

内网穿透端口映射内外网反弹 shell 回顾

内网穿透&端口映射&内外网反弹 shell 回顾 内网概念 我们常说的内网&#xff0c;一般指的是非公有 IPv4 地址的网络比如学校机房里的电脑一般为私有网络&#xff0c;家里的网络也是私有网络 私有网络的范围与划分 ipaddressareaA 类地址10.0.0.0&#xff5e;10.255.…

521源码-免费下载-WordPress全能自动采集与发布插件 – WP-AutoPostPro 汉化版

更多网站源码学习教程&#xff0c;请点击&#x1f449;-521源码-&#x1f448;获取最新资源 本工具下载地址&#xff1a;WordPress全能自动采集与发布插件 – WP-AutoPostPro 汉化版 - 521源码 WP-AutoPostPro是一款出类拔萃的WordPress自动采集发布插件&#xff0c;凭借其卓…

Yolov5保姆及入门-含源码【推荐】

前言 YOLO系列模型作为一种实时目标检测算法&#xff0c;自从YOLO1发布以来&#xff0c;就以其检测速度快、准确率高而受到广泛关注。随着技术的迭代&#xff0c;YOLO系列已经发展到了YOLO8。本文将详细介绍YOLO5的技术规格、应用场景、特点以及性能对比。 yolov5源码下载地址…

Oracle 创建DBLink

一、查询是否具有创建DBLink的权限select * from user_sys_privs where privilege like upper(%DATABASE LINK%); 二、如果没有&#xff0c;则需要使用 sysdba 角色给用户赋权grant create public database link to dbusername; 三、创建dblink -- 如果创建全局 dblink&am…

海外真实机房给云手机上“福利”

不论是做出海跨境方面的业务&#xff0c;大家都不自觉的把目光放在了海外的云手机上&#xff0c;尤其是有直播群控&#xff0c;引流获客这样的一个刚需&#xff0c;只有处在海外真实环境了&#xff0c;那么在一些活动的过程中&#xff0c;才能表现的更稳&#xff0c;而不会触发…

React@16.x(10)HOC高阶组件和横切关注点

目录 1&#xff0c;什么是HOC2&#xff0c;什么是横切关注点2.1&#xff0c;简单理解2.2&#xff0c;常见解决方式 3&#xff0c;HOC 举例3.1&#xff0c;全局功能3.2&#xff0c;小范围使用 4&#xff0c;HOC 使用注意点4.1&#xff0c;不要在 render 中使用4.2&#xff0c;不…

Android --- 交换两个布局

准备布局 exchange_out_layout exchange_in_layout <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"andr…

免费,Python蓝桥杯等级考试真题--第13级(含答案解析和代码)

Python蓝桥杯等级考试真题–第13级 一、 选择题 答案&#xff1a;C 解析&#xff1a;正向下标由0开始&#xff0c;下标3代表第四个元素&#xff0c;故答案为C。 答案&#xff1a;A 解析&#xff1a;range&#xff08;0,4&#xff09;的取前不取后&#xff0c;元组的符号是小括…

【CGAL】Region_Growing 检测平面并保存

目录 说明一、算法原理二、代码展示三、结果展示 说明 本篇博客主要介绍CGAL库中使用Region_Growing算法检测平面的算法原理、代码以及最后展示结果。其中&#xff0c;代码部分在CGAL官方库中提供了例子。我在其中做了一些修改&#xff0c;使其可以读取PLY类型的点云文件&…

可行性研究报告编制参考资料(Word原件-软件全套资料)

1业务需求可行性分析 2技术可行性分析 2.1规范化原则 2.2高度的兼容性和可移植性 2.3人性化、适用性 2.4标准化统一设计原则 2.5先进安全可扩展性原则 3开发周期可行性分析 4人力资源可行性分析 5成本分析 6收益分析 7结论 软件全套精华资料包清单部分文件列表&#xff1a; 工作…

【搭建大语言模型】使用LocalGPT搭建本地大语言模型服务并实现远程访问进行交互

文章目录 前言环境准备1. localGPT部署2. 启动和使用3. 安装cpolar 内网穿透4. 创建公网地址5. 公网地址访问6. 固定公网地址 前言 本文主要介绍如何本地部署LocalGPT并实现远程访问&#xff0c;由于localGPT只能通过本地局域网IP地址端口号的形式访问&#xff0c;实现远程访问…

设计模式15——享元模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 享元模式&#xff08;Flyweigh…