按位运算符、逻辑运算符

按位运算

运算符描述
&按位与运算符:如果两个相应位都为1,则该位的结果为1,否则为0
|按位或运算符:只要对应的两个二进位有一个为1时,结果位就为1
^按位异或运算符:当两对应的二进位相异时,结果为1
~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1
<<左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0
>>右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数

按位运算符

按位与

按位与运算符 & 是二进制位运算符,用于对两个数的每个对应二进制位进行与操作。它的规则是,如果两个相应位都为 1,则结果为 1;否则,结果为 0。

例如,假设有两个二进制数 A 和 B:

A: 1101
B: 1010

按位与操作: A & B

   1101& 1010-------1000

因此,1101 & 1010 的结果为 1000。这个规则适用于每一对相应的二进制位。

按位或

按位或运算符 | 是二进制位运算符,用于对两个数的每个对应二进制位进行或操作。它的规则是,如果两个相应位中至少有一个为 1,则结果为 1;只有两个相应位都为 0 时,结果为 0。

例如,假设有两个二进制数 A 和 B:

A: 1101
B: 1010

按位或操作: A | B

   1101| 1010-------1111

因此,1101 | 1010 的结果为 1111。这个规则适用于每一对相应的二进制位。

按位异或

按位异或运算符 ^ 是二进制位运算符,用于对两个数的每个对应二进制位进行异或操作。异或的规则是,如果两个相应位相同(都是 0 或都是 1),则结果为 0;如果两个相应位不同(一个是 0,另一个是 1),则结果为 1。

例如,假设有两个二进制数 A 和 B:

A: 1101
B: 1010

按位异或操作: A ^ B

   1101^ 1010-------0111

因此,1101 ^ 1010 的结果为 0111。这个规则适用于每一对相应的二进制位。

按位取反

按位取反运算符 ~ 是一个一元运算符,用于对一个数的每个二进制位取反,即将 0 变为 1,将 1 变为 0。

例如,假设有一个二进制数 A:

A: 1101

按位取反操作: ~A

   1101-------0010

因此,~1101 的结果为 0010。这个规则适用于每个二进制位。请注意,由于计算机使用补码表示负数,因此取反的结果可能会有一些意想不到的效果,具体取决于数据类型和编程语言的规则。

移位

左移位运算符 << 和右移位运算符 >> 是用于对二进制数进行位移操作的。

  • 左移位运算符 (<<):将一个数的二进制表示向左移动指定的位数,右侧空出的位用 0 填充。语法:a << n,其中 a 是要进行左移的数,n 是左移的位数。

    例如,5 << 2 表示将二进制数 5 向左移动两位:

    5 (二进制: 00000101)
    左移两位后: 00010100
    结果为 20
    
  • 右移位运算符 (>>):将一个数的二进制表示向右移动指定的位数,左侧空出的位用原先最高位的值填充(有符号数用符号位填充,无符号数用 0 填充)。语法:a >> n,其中 a 是要进行右移的数,n 是右移的位数。

    例如,16 >> 2 表示将二进制数 16 向右移动两位:

    16 (二进制: 00010000)
    右移两位后: 00000004
    结果为 4
    

这两个运算符常用于对数据进行位级操作,例如,对于一些底层的位级编程需求。

配置寄存器

配置寄存器的按位与(AND)和按位或(OR)操作通常用于对寄存器的特定位进行设置或清除,以达到配置硬件状态的目的。

按位与操作

按位与操作用于将寄存器的特定位设置为指定的值,而不影响其他位。操作的基本形式是使用一个掩码,其中掩码的每个位都是希望保留的位,其余位设为 0。然后,使用按位与运算符将掩码应用于寄存器。这将清除掉掩码中设为 0 的那些位。

例如,如果我们有一个寄存器 reg,我们希望将其第 3 位设置为 1,可以执行以下操作:

reg = reg | (1 << 2);  // 将第 3 位设为 1,使用按位或

上述操作中,1 << 2 创建了一个二进制数 00000100,然后使用按位或将其与寄存器 reg 相结合。

按位或操作

按位或操作用于将寄存器的特定位设置为 1,而不影响其他位。操作的基本形式是使用一个掩码,其中掩码的每个位都是希望设置为 1 的位,其余位设为 0。然后,使用按位或运算符将掩码应用于寄存器。这将把掩码中设为 1 的那些位设置为 1,而保留其他位不变。

例如,如果我们有一个寄存器 reg,我们希望将其第 4 位设置为 1,可以执行以下操作:

reg = reg | (1 << 3);  // 将第 4 位设为 1,使用按位或

上述操作中,1 << 3 创建了一个二进制数 00001000,然后使用按位或将其与寄存器 reg 相结合。

总体而言,这些按位运算是对寄存器进行底层配置的有力工具,使得可以针对需要的位进行灵活的设置和清除。

掩码

掩码是一个用于按位操作的二进制数,它的作用是选择性地启用或禁用其他二进制数的特定位。在实际编程中,掩码通常通过使用按位左移和按位或运算符来创建。

按位左移操作

按位左移操作是将二进制数向左移动指定的位数。左移操作符是 <<,其形式为 x << n,其中 x 是要移动的二进制数,n 是左移的位数。左移相当于在原始二进制数的右侧附加 n 个零。

按位或操作

按位或操作是将两个二进制数的每个对应位进行逻辑或运算。按位或操作符是 |,其形式为 x | y,其中 xy 是进行按位或运算的两个二进制数。

创建掩码的一般步骤如下:

  1. 使用按位左移操作创建一个包含特定位的二进制数,将需要设置或清除的位设置为 1。
  2. 使用按位或操作将掩码与其他二进制数结合,以选择性地启用或禁用特定位。

例如,假设我们有一个 8 位的寄存器,我们想要设置第 3 位和第 5 位。我们可以使用以下步骤:

// 创建掩码,将第 3 位和第 5 位设置为 1
int mask = (1 << 2) | (1 << 4);// 使用按位或将掩码应用于寄存器 reg
reg = reg | mask;

上述代码中,(1 << 2)(1 << 4) 分别创建了二进制数 0000010000010000,然后按位或操作符将它们结合成掩码 00010100。最后,通过将这个掩码与寄存器 reg 进行按位或操作,我们可以选择性地设置第 3 位和第 5 位。

逻辑运算符

逻辑运算符用于执行逻辑运算,常见的有与(AND)、或(OR)、非(NOT)三种。这些运算符通常用于布尔类型的操作数。下面分别讨论这三种逻辑运算符的含义:

  1. 逻辑与(AND)操作符 &&

    • 含义: 如果两个操作数都为 True,则结果为 True;如果其中一个或两个操作数为 False,则结果为 False
    • 示例: True && False 的结果为 False
  2. 逻辑或(OR)操作符 ||

    • 含义: 如果两个操作数至少有一个为 True,则结果为 True;如果两个操作数都为 False,则结果为 False
    • 示例: True || False 的结果为 True
  3. 逻辑非(NOT)操作符 !

    • 含义: 对一个操作数取反,如果操作数为 True,则结果为 False;如果操作数为 False,则结果为 True
    • 示例: !True 的结果为 False

这些逻辑运算符通常用于条件判断,控制程序的执行流程。在某些编程语言中,逻辑运算符具有短路求值的特性,即如果第一个操作数已经确定了整个表达式的结果,就不再计算第二个操作数。这可以提高程序的性能,尤其是在处理复杂条件表达式时。

条件与

在编程中,“条件与” 通常指的是逻辑运算符 “&&”(与运算符)。“条件与” 表达式的含义是,当且仅当所有条件都为真(True)时,整个表达式的结果才为真。

例如,在C、C++、Java等编程语言中,可以使用 “&&” 来表示 “条件与”。下面是一个示例:

#include <stdio.h>int main() {int a = 5;int b = 10;// 条件与表达式if (a > 0 && b > 0) {printf("Both a and b are greater than 0.\n");} else {printf("At least one of them is not greater than 0.\n");}return 0;
}

在这个示例中,a > 0 && b > 0 表达式中的 “&&” 表示 “条件与”,只有当 a 大于 0 且 b 大于 0 时,整个表达式的值为真,程序会输出 “Both a and b are greater than 0.”。如果其中一个条件不满足,那么整个表达式的值为假,程序会输出 “At least one of them is not greater than 0.”。

“条件与” 在控制结构中经常用于需要多个条件同时满足时的情况,比如在 if 语句中。

条件或

条件或通常指的是逻辑运算符 “||”(或运算符)。“条件或” 表达式的含义是,当至少一个条件为真(True)时,整个表达式的结果就为真。

在C、C++、Java等编程语言中,可以使用 “||” 来表示 “条件或”。下面是一个示例:

#include <stdio.h>int main() {int a = 5;int b = 10;// 条件或表达式if (a > 0 || b > 0) {printf("At least one of them is greater than 0.\n");} else {printf("Both a and b are not greater than 0.\n");}return 0;
}

在这个示例中,a > 0 || b > 0 表达式中的 “||” 表示 “条件或”,只要 a 大于 0 或者 b 大于 0,整个表达式的值为真,程序会输出 “At least one of them is greater than 0.”。只有当两个条件都不满足时,整个表达式的值为假,程序会输出 “Both a and b are not greater than 0.”。

“条件或” 在控制结构中经常用于需要满足多个条件中的至少一个时的情况,比如在 if 语句中。

条件非

“条件非” 通常指的是逻辑运算符 “!”(非运算符)。“条件非” 表达式的含义是,当给定的条件为假(False)时,整个表达式的结果为真(True),反之亦然。

在C、C++、Java等编程语言中,可以使用 “!” 来表示 “条件非”。下面是一个示例:

#include <stdio.h>int main() {int a = 5;// 条件非表达式if (!(a > 0)) {printf("a is not greater than 0.\n");} else {printf("a is greater than 0.\n");}return 0;
}

在这个示例中,!(a > 0) 表达式中的 “!” 表示 “条件非”,如果 a 不大于 0,整个表达式的值为真,程序会输出 “a is not greater than 0.”;反之,如果 a 大于 0,整个表达式的值为假,程序会输出 “a is greater than 0.”。

“条件非” 经常用于需要检查某个条件是否不成立的情况,比如在 if 语句中。

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

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

相关文章

pipeline + node +jenkins+kubernetes部署yarn前端项目

1、编写Dockerfile文件 # Set the base image FROM node:16.10.0# WORKDIR /usr/src/app/ WORKDIR /home/option# Copy files COPY ./ /home/option/# Build arguments LABEL branch${BRANCH} LABEL commit${COMMIT} LABEL date${BUILD_DATE} ARG ENV# Set ENV variables ENV …

视频封装格式

FLV&#xff08;Flash Video&#xff09; FLV封装格式 Tag Data分为Audio&#xff0c;Video&#xff0c;Script三种 TS&#xff08;Transport Stream&#xff09;传输流 TS文件分为三层&#xff0c;&#xff08;倒叙更好理解&#xff09; TS层&#xff1a;在PES层基础上加入…

Leetcode——岛屿的最大面积

1. 题目链接&#xff1a;695. 岛屿的最大面积 2. 题目描述&#xff1a; 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都…

Moto edge s pro手机 WIFI和蓝牙连接不上 解决方法分享

2021年12月入手一台Moto Edge S Pro 12256版&#xff0c;看着性价比很高&#xff0c;越用越垃圾。屏幕显示没有vivo亮丽/APP图标很丑/屏幕上一点点水就失灵/拍照片边缘是模糊的/系统几乎不更新。 以上都可以忍受&#xff0c;但是&#xff1a; 用一年不到&#xff0c;蓝牙不能…

pycharm使用

1、注释多行&#xff1a;ctril/ 2、解除多行注释&#xff1a;ctril/

【人工智能Ⅰ】7-KNN 决策树

【人工智能Ⅰ】7-KNN & 决策树 7-1 KNN&#xff08;K near neighbour&#xff09; 思想&#xff1a;一个样本与数据集中的k个样本最相似&#xff0c;若这k个样本大多数属于某类别&#xff0c;则该个样本也属于这类别 距离度量 样本相似性用欧氏距离定义 L p ( x i , x…

kicad源代码研究:symbol properties窗口中为SCH_SYMBOL添加或删除一个sch_field

向grid中添加一个sch_field FIELDS_GRID_TABLE<SCH_FIELD>* m_fields; WX_GRID* m_fieldsGrid; simEnableFieldRow (int) m_fields->size(); m_fields->emplace_back( VECTOR2I( 0, 0 ), simEnableFieldRow, m_symbol, SIM_ENABLE_FIELD ); // notify the grid w…

前端 vue 面试题 (一)

文章目录 v-if,v-show差别v-for和v-if虚拟dom解决什么问题vue的data为什么返回函数不返回对象比较vue&#xff0c;reactvue双向绑定原理vue虚拟dom 的diff算法vue 虚拟dom的diff算法的时间复杂度vue2与vue3的区别vue数据缓存&#xff0c;避免重复计算单页应用怎么跨页面传参vue…

在MySQL上实现间隔5分钟汇总取数及相关字符串、时间处理方法实践

1. 实践案例需求描述 查询mysql数据库&#xff0c;按每5分钟分组获取3个小时内的电量数据&#xff0c;参考SQL语句如下。 select sd.RecordTime RecordTime, sd.sddl sddl,sd.pvdl ,cap.capdl capdl from ((SELECT CONCAT(DATE_FORMAT(RecordTime,%Y-%m-%d %H:), LPAD(floor(…

Ubuntu20.04 通过nmcli命令查看网卡状态为unmanaged

问题描述&#xff1a; 通过下述指令查看网卡状态为 "unmanaged" nmcli dev status 解决方法&#xff1a; cd /usr/lib/NetworkManager/conf.d/ sudo mv 10-globally-managed-devices.conf 10-globally-managed-devices.conf.bak sudo cp 10-globally-managed-devic…

Java 设计模式——中介者模式

目录 1.概述2.结构3.案例实现3.1.抽象中介类3.2.抽象同事类3.3.具体同事类3.4.具体中介类3.5.测试 4.优缺点5.使用场景 1.概述 &#xff08;1&#xff09;一般来说&#xff0c;同事类之间的关系是比较复杂的&#xff0c;多个同事类之间互相关联时&#xff0c;他们之间的关系会…

Python爬取股票交易数据代码示例及可视化展示。

文章目录 前言一、开发环境二、第三方模块三、爬虫案例步骤四、爬虫程序全部代码1.分析网页2.导入模块3.请求数据4.解析数据5.翻页6.保存数据 五、实现效果六、数据可视化全部代码1.导入数据2.读取数据3.可视化图表4.效果展示关于Python技术储备一、Python所有方向的学习路线二…

Windows本地配置带GPU的Pytorch环境

首先需要安装并配置好Anaconda环境&#xff0c;安装教程教程随便找一个就好。 第一步&#xff1a;安装好之后创建conda虚拟环境&#xff1a; conda create -n your_env_name pythonx.x 第二步&#xff1a;安装需要版本的pytorch&#xff1a;pytorch下载链接 cu100/torch-1.2…

VUE基础的一些总结

首先推荐观看VUE官方文档 目录 创建一个 Vue 应用 要创建一个 Vue 应用&#xff0c;你需要按照以下步骤操作&#xff1a; 步骤 1&#xff1a;安装 Node.js 和 npm 确保你的计算机上已经安装了 Node.js。你可以在 Node.js 官网 上下载并安装它。安装完成后&#xff0c;npm&…

算法之Eigen库

Eigen库是用于线性代数运算的C++模板库,提供了矩阵、向量、数值求解器等线性代数相关算法的实现。以下是Eigen库的一些基本用法示例: 1. 安装Eigen库 首先,你需要下载并安装Eigen库。你可以从Eigen的官方网站上获取最新版本:Eigen官方网站 2. 定义矩阵和向量: #includ…

sqlalchemy查询数据为空,查询范围对应的数据在数据库真实存在

记录一个开发过程遇到的小bug&#xff0c;构造些伪数据还原并解释。 """ 场景&#xff1a;传参触发了查询条件&#xff0c;数据库中是存在传参对应范围的数据&#xff0c;但是通过查询条件得到的查询结果为空 """ 入参场景一&#xff1a; start_…

修复img实际有正确的链接,但是不显示 (chrome 插件保存的html)--google镜像chatgpt

打开目标html文件 chrome 控制台 执行以下脚本 //删除侧边栏 $x("//div[idsidebar]")[0].remove();//修复img实际有正确的链接&#xff0c;但是不显示 (chrome 插件保存的html&#xff09; //img.data-savepage-src 复制到 img.src imgs$x("//img"); imgs…

小黑完成了最后一节健身课,顺利完成了跳绳比赛,乘飞机到达南京准备第二天领物资和南京城内闲逛的leetcode之旅:215. 数组中的第K个最大元素

小黑代码 class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:# 数组长度n len(nums)nums list(map(lambda x:-x, nums))q []for i in range(n):heapq.heappush(q, nums[i])# 出堆target -1for i in range(k):target heapq.heappop(q)return -…

Java Web——TomcatWeb服务器

目录 1. 服务器概述 1.1. 服务器硬件 1.2. 服务器软件 2. Web服务器 2.1. Tomcat服务器 2.2. 简单的Web服务器使用 1. 服务器概述 服务器指的是网络环境下为客户机提供某种服务的专用计算机&#xff0c;服务器安装有网络操作系统和各种服务器的应用系统服务器的具有高速…

《向量数据库指南》——2023云栖大会现场,向量数据库Milvus Cloud成关注焦点

近期,广受关注的2023 云栖大会正式收官,来自全球各地的开发者集聚一堂,共同探索 AI 时代的更多可能性。 云栖大会是由阿里巴巴集团主办的科技盛宴,是中国最早的开发者创新展示平台。据悉,今年云栖大会的主题为“计算,为了无法计算的价值”,共吸引了全球 44 个国家和地区…