位运算与操作符应用

一.二进制与进制转化

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,一经查实,立即删除!

相关文章

适配器模式概述

大体介绍 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;其核心目的是通过提供一个适配器类来使得原本接口不兼容的类可以一起工作。它通过将一个类的接口转换成客户端所期望的接口&#xff0c;使得原本因接口不兼容而无法一起工作的类可…

计算机专业考研 408 学科学习方法

计算机专业考研 408 学科涵盖数据结构、计算机组成原理、操作系统和计算机网络四门核心课程&#xff0c;内容多且难度大。但只要掌握科学的学习方法&#xff0c;便能化繁为简&#xff0c;稳步提升。以下为大家详细介绍 408 学科的学习方法。 一、基础夯实阶段&#xff1a;全面…

C++ 设计模式:命令模式(Command Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 访问器模式 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求封装成一个对象&#xff0c;从而使你可以用不同的请求对客户进行参数化&#xff0c;对请求排队或记录请求日志…

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

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

swagger,showdoc,apifox,Mock 服务,dubbo,ZooKeeper和dubbo的关系

Swagger、ShowDoc 和 Apifox 之间的区别与优势 Swagger、ShowDoc 和 Apifox 都是用于 API 文档管理和测试的工具&#xff0c;但它们各有特色和适用场景。以下是详细的比较&#xff0c;并附上每个工具的具体用法示例。 1. Swagger 特点与优势&#xff1a; 广泛采用: Swagger…

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

边沿检测电路漏检原因分析 常用结构如下&#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;和三极管&#…

鸿蒙开发:了解正则表达式

前言 从给出的文本中&#xff0c;按照既定的相关规则&#xff0c;匹配出符合的数据&#xff0c;其中的规则就是正则表达式&#xff0c;使用正则表达式&#xff0c;可以使得我们用简洁的代码就能实现一定复杂的逻辑&#xff0c;比如判断一个邮箱账号是否符合正常的邮箱账号&…

Kafka的acks机制和ISR列表

Kafka 是一个流行的分布式流处理平台&#xff0c;用于构建实时数据流管道和应用程序。在 Kafka 中&#xff0c;acks 机制和 ISR&#xff08;In-Sync Replicas&#xff09;列表是两个重要的概念&#xff0c;它们共同确保消息的持久性和可靠性。 acks 机制 acks 机制是 Kafka 生…

在 Ubuntu 下通过 Docker 部署 Caddy 服务器

嘿&#xff0c;伙伴们&#xff01;今天我们来聊聊如何在 Ubuntu 系统下通过 Docker 部署 Caddy 服务器。Caddy 是一个现代的 Web 服务器&#xff0c;支持自动 HTTPS&#xff0c;简单易用&#xff0c;特别适合快速搭建网站。而 Docker 则是一个让你可以隔离和管理应用的神器。结…

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

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

Linux top指令

top指令概述 top 是 Linux 系统中用于实时监控系统性能和进程信息的命令&#xff0c;功能强大且灵活。它提供了系统资源的动态视图&#xff0c;包括 CPU、内存、运行中的进程等。 这个指令可以说是Linux中最基本的工具了&#xff0c;用来监视系统的实时运行状态&#xff0c;类…

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;并探讨其应用场景、实现方法、优点与局…

期末算法分析程序填空题

目录 5-1 最小生成树&#xff08;普里姆算法&#xff09; 5-2 快速排序&#xff08;分治法&#xff09; 输入样例&#xff1a; 输出样例&#xff1a; 5-3 归并排序(递归法) 输入样例&#xff1a; 输出样例&#xff1a; 5-4 求解编辑距离问题&#xff08;动态规划法&#xff09;…

深入解析 Conda 安装的默认依赖包及其作用:conda create安装了哪些包(中英双语)

深入解析 Conda 安装的默认依赖包及其作用 当我们使用 Conda 创建新环境时&#xff0c;例如执行命令&#xff1a; conda create -n olmes python3.10Conda 会自动为我们安装一系列基础依赖包&#xff0c;保证 Python 环境能够正常运行。这些包不仅是我们开发的基础工具&#…

Mac、Linux命令

Linux 查本机IP&#xff1a;ip addr 查询文件里符合条件的字符串&#xff1a;grep Mac 查本机IP&#xff1a;ipconfig

Visual Studio 中增加的AI功能

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