位运算与操作符应用

一.二进制与进制转化

1.概念解析

我们常常能听见2进制,8进制,16进制这些讲法。他们都是数值的不同表达形式。根据不同的进制大小有着不同的权重比例。我们生活中常用的是10进制数,也就是逢10进1,由此推理至其他进制。例如2进制就是逢2进1。

2.进制转化

(1)10进制转化为2进制

如图将10进制的数不断对进制数进行取模,之后在将数除等原数,周而复始,最后将输出数导致就是原数转换的进制数。

 (2)2进制转8进制

8进制中每一位都是0~7中的数字,0~7的数字各自写成2进制位最多有3个就足够了。所以我们将二进制位转换时,每次只需3位3位的进行转化。

(3)2进制转16进制

与上文同理,16进制位是由0~9,A~F直接的数组成的,用2进制表示最多只有4位。

 3.相关技巧与用法

例如给定x进制,x进制形式的数s,要将其转换为z进制形式。

思路为先将x进制的数s转化为10进制形式,再将该数转化为z进制形式。

将x进制的s转化为10进制形式有两种方法:

(1)逐位相乘法

int main()
{int x;int i = 0;string s;int ret = 0;cin >> x >> s;int n = s.size() - 1;while (n >= 0){if (s[n] <= '9'){ret += (s[n--] - '0') * pow(x, i);}else{ret += (s[n--] - 'A' + 10) * pow(x, i);}i++;}cout << ret;return 0;
}

将每一位的数乘对应的权重转化为10进制相加。

(2)库函数调用

#include <string>
int main()
{int x;string s;cin >> x >> s;int ret = stoi(s, nullptr, x);cout << ret;return 0;
}

这里调用了stoi函数(string  to  int),将字符串转换为int形式,有三个参数,stoi(const string& str, size_t* idx = 0, int base = 10);。第一个参数为需要转化的字符串,第二个是一个指针,指向停止转化的字符;第三个参数是需要转换的进制(默认情况为10进制)。

在这里我们将字符串s转化为x进制。

(3)将10进制转化为z进制

string s = "0123456789ABCDEF";void print(int ret, int m)
{if (ret > m){print(ret / m, m);}cout << s[ret % m];
}

这里我们将10进制数设置为ret,需要转换的进制为m进制。我们使用一个递归,参照上面的(10进制转化为2进制的思路)。

二.位运算

1.概念解析

这里就做一些简单的介绍,重点内容在于后序的运用方法。

(1)左移右移操作符

最高的符号位不变,左移将二进制数整体左移动一位右边补0;右移将二进制整体右移一位,此时分为两种情况。如果是逻辑右移则左边用0进行填充,若是算术右移则左边用符号位进行填充。

(2)&(按位与)  |(按位或)  ^(按位异或)  ~(按位取反)

例a&b当a与b二进制位上都为1,得到的结果为1,否则为0。

例a|b当a与b二进制位上有1则为1,否则为0。

例a^b当a与b二进制位上相同则为0,不相同则为1。

例~a将1变为0,将0变为1。

这里有个小tips:

所有的二进制操作都是先转化为补码的形式展开的,正数的原码反码补码都相同,负数将原码取反加1(符号位不变)得到的就是补码。

2.位运算的应用

(1)保留二进制位中的指定位

 有时候我们希望取出二进制中的某一位,使其他位变为0。我们只需要将对应的位进行(x&m)处理。

 (2)获取二进制中的指定位

当我们需要获取⼀个整数 x 的⼆进制中第 i 位(从低到⾼,以最低位为第 0 位是 1 还是 0 的时
候,我们可以对 x 做这样的运算: (x >> i) & 1 ,如果结果是 0 ,表⽰第 i 位是 0 ,如果结果是 1 ,表⽰第 i 位是 1 。

(3)将指定二进制位设置为1

设置 x ⼆进制中的某 1 位,也就是将 x ⼆进制中的第 i 位(从低到⾼,以最低位为第 0 位置为 1 ,则可以进⾏下⾯的运算: x |= (1<<i) ;

 (4)将指定二进制位设置为0

将⼀个整数 x 的⼆进制表⽰中的某 1 位设置为 0 ,其余位置保留原值。也就是将 x 二进制中的第 i 位(从低到⾼,以最低位为第 0 位)置为 0 ,其他位保持不变,则可以进⾏下⾯的运算: x &= ~(1<<i)

我们需要对指定位置设置为0,只需要对该位进行&1处理,而其他位需要&0处理。所以我们先将1移动到要置为0的位置,再按位取反,这样就只有该位得到0其余位都为1。

 

(5)反转指定二进制位

使用一个数m,使得m的二进制位中的第i位为1其余设置为0,然后将(x^m)得到反转后的值。

由于按位取反中,若原数第i位为1,相同异或取反后变为0,若原数为0,与1异或取反后为1。

 (6)将二进制位最右边的1变为0

我们可以使用x  &(x-1)的方法x - 1让有1的最低的一位变为了0,而其他位不会改变。将其进行&,就可以消去最右边的那一位1。

我们可以通过 x  &(x-1)的计算消除一位1,那么如果我们对一个数不断的进行消除1的操作,套上一个循环,就能计算出这个二进制数中1的个数。

一些其他用途:

这种思路有一个专有名词叫做位图(bitmap)。位图是数据结构操作系统常用的数据结构,他可以高效的快速释放资源 

(7)只保留二进制位中最右边的1

有时候,我们需要将⼀个整数 x 的⼆进制表⽰中最右边的 1 保留下来,其他位都置为 0 ,那么 x
&(-x)   就可以得到想要的数字。

(8)异或的巧用

相同的两个数异或的结果为0;0与任何数x异或的结果为x;同时异或满足交换律a^b^a == a^a^b;

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

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

相关文章

html+css+js网页设计 美食 美食4个页面带js

htmlcssjs网页设计 美食 美食4个页面带js 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#…

边沿检测电路漏检原因分析

边沿检测电路漏检原因分析 常用结构如下&#xff1a; module edge_detect1( input clk, input signal, output pe, //上升沿 output ne, //下降沿 output de //双边沿 );reg reg1;always(posedge clk) beginreg1 < signal; endassign pe (~reg1) & signal; assign…

嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别

引言&#xff1a;在现代嵌入式硬件设计中&#xff0c;开关元件作为电路中的重要组成部分&#xff0c;起着至关重要的作用。三种主要的开关元件——IGBT&#xff08;绝缘栅双极型晶体管&#xff09;、MOSFET&#xff08;金属氧化物半导体场效应晶体管&#xff09;和三极管&#…

计算机网络•自顶向下方法:网络层介绍、路由器的组成

网络层介绍 网络层服务&#xff1a;网络层为传输层提供主机到主机的通信服务 每一台主机和路由器都运行网络层协议 发送终端&#xff1a;将传输层报文段封装到网络层分组中&#xff0c;发送给边缘路由器路由器&#xff1a;将分组从输入链路转发到输出链路接收终端&#xff1…

Qt监控系统放大招/历经十几年迭代完善/多屏幕辅屏预览/多层级设备树/网络登录和回放

一、前言说明 近期对视频监控系统做了比较大的更新升级&#xff0c;主要就是三点&#xff0c;第一点就是增加了辅屏预览&#xff0c;这个也是好多个客户需要的功能&#xff0c;海康的iVMS-4200客户端就有这个功能&#xff0c;方便在多个屏幕打开不同的视频进行查看&#xff0c…

网络原理(六): UDP 协议

目录 1. UDP 协议 1.1 协议特点 1.2 协议报文格式 1.2.1 UDP 长度 1.2.2 校验和 1. UDP 协议 在进行网络编程时, 我们已经对 UDP 协议进行了简单了解. 并且应用层的很多操作, 需要调用传输层的提供的接口, 基于 socket api 来进行完成的. 1.1 协议特点 UDP 协议具有以…

前端页面展示本电脑的摄像头,并使用js获取摄像头列表

可以通过 JavaScript 使用 navigator.mediaDevices.enumerateDevices() 获取电脑上的摄像头列表。以下是一个示例代码&#xff0c;可以展示摄像头列表并选择进行预览。 HTML JavaScript 实现摄像头列表展示和预览 <!DOCTYPE html> <html lang"zh-CN">…

【漫话机器学习系列】028.CP

Mallows’ Cp&#xff1a;标准化公式解析与应用 Mallows’ Cp 是一种常用的模型选择工具&#xff0c;用于在一系列候选模型中权衡拟合度和复杂性&#xff0c;帮助我们选择性能最优的模型。本文将基于其标准化公式展开详细解析&#xff0c;并探讨其应用场景、实现方法、优点与局…

Visual Studio 中增加的AI功能

前言&#xff1a; 人工智能的发展&#xff0c;在现在&#xff0c;编程技术的IDE里面也融合了AI的基本操做。本例&#xff0c;以微软的Visual Studio中的人工智能的功能介绍例子。 本例的环境&#xff1a; Visual Studio 17.12 1 AI 智能变量检测&#xff1a; 上图展示了一…

江科大学习笔记之——HAL库点亮一个LED灯

HAL三步走&#xff1a;1.建工程。2.设配置。3.写代码 一.建立工程 HAL库写法 点击FinIsh 2.配置时钟 2 、设置配置参数 把模块.C.h单独设置文件 生产代码 三写代码 控制GPIO就三步 1.RCC时钟使能 2.结构体配置GPIO寄存器 3.控制GPIO值 上面的步骤已经把前两步的配置完成了接下…

Spring MVC (下)小项目实战

1. 加法计算器 需求分析: 客户端输入俩个数,服务端进行相加然后返回结果. 约定前后端交互接口: 接口的概念: 接口⼜叫API&#xff08;ApplicationProgrammingInterface),我们⼀般讲到 接口或者API&#xff0c;指的都是同⼀个东西.是指应⽤程序对外提供的服务的描述,⽤于交换信…

【OpenGL ES】GLSL基础语法

1 前言 本文将介绍 GLSL 中数据类型、数组、结构体、宏、运算符、向量运算、矩阵运算、函数、流程控制、精度限定符、变量限定符&#xff08;in、out、inout&#xff09;、函数参数限定符等内容&#xff0c;另外提供了一个 include 工具&#xff0c;方便多文件管理 glsl 代码&a…

RPA系列-uipath 学习笔记4

使用Uipath 处理hover的问题 备注&#xff1a;使用uipath stversion&#xff1a;2024.10.6,所有学习来源自uipath Academy 首先&#xff0c;打开uipath给我们提供的一个网站 ACME,这个网站呢&#xff0c;需要提前注册一下的哈。 今天呢&#xff0c;就是记录一下&#xff0c;怎…

Linux:进程概念

1.冯诺依曼体系结构 结论&#xff1a; --- CPU不和外设直接打交道&#xff0c;和内存直接打交道。 --- 所有的外设&#xff0c;有数据需要收入&#xff0c;只能载入到内存中&#xff1b;内存写出&#xff0c;也一定是写道外设中。 --- 为什么程序要运行必须加载到内存&#xf…

活动预告 | Microsoft Azure 在线技术公开课:使用 Azure OpenAI 服务构建生成式应用

课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft Cloud 技术的了解。参加我们举办的“使用 Azure OpenAI 服务构建生成式应用”活动&#xff0c;了解如何使用包括 GPT 在内的强大的…

Flutter:打包apk,详细图文介绍

困扰了一天&#xff0c;终于能正常打包apk安装了&#xff0c;记录下打包的流程。建议参考我这篇文章时&#xff0c;同时看下官网的构建说明。 官网构建并发布 Android 应用详情 1、AS创建Flutter项目 2、cmd执行命令 生成一个sunluyi.jks的文件&#xff0c;可以自行把sunluyi替…

【服务器学习专栏 1.2 -- 带外管理】

请阅读 嵌入式学习必备专栏 文章目录 Overview服务器带外管理BMC 介绍BMC 特点BMC 工作原理 Overview 从技术的角度&#xff0c;网络管理可分为带外管理&#xff08;out-of-band&#xff09;和带内管理&#xff08;in-band&#xff09;两种管理模式。 带内管理&#xff0c;是指…

南京市建邺区南苑街道一行莅临园区考察交流

2024年8月28日&#xff0c;南京市建邺区南苑街道办事处副主任董兵、南苑街道发展服务办公室一级主任科员王洪政、建邺区国资集团科创公司经理杲畅&#xff0c;在树莓集团华东区负责人田林和陈强经理的陪同下&#xff0c;莅临集团总部-国际数字影像产业园考察交流。 树莓科技&am…

docker中使用nginx

宿主机和docker中nginx做映射 宿主机中nginx 映射目录 /root/myDockerData/devnginx 在容器中相关位置分别是&#xff1a; 配置文件位置&#xff1a;/etc/nginx/ 日志位置&#xff1a;/var/log/nginx/ 项目位置&#xff1a;/usr/share/nginx/html 如下配置启动命令行&#x…

Casino Royale靶场wp

0x00 下载安装 https://download.vulnhub.com/casinoroyale/CasinoRoyale.ova 导入vmware启动 0x01 主机信息收集 0x02目录扫描 index.php 获取到一个域名 修改本地hosts 添加一行 路径&#xff1a;C:\Windows\System32\drivers\etc 192.168.2.20 casino-royale.local 点击…