位运算的简介与实例(Mysql)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 位运算的简介与实例(Mysql)

什么是位运算?

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。

下面是维基百科对于位运算的简要解释:

In digital computer programming, a bitwise operation operates on one or more bit patterns or binary numerals at the level of their individual bits. It is a fast, simple action directly supported by the processor, and is used to manipulate values for comparisons and calculations.
On simple low-cost processors, typically, bitwise operations are substantially faster than division, several times faster than multiplication, and sometimes significantly faster than addition. While modern processors usually perform addition and multiplication just as fast as bitwise operations due to their longer instruction pipelines and other architectural design choices, bitwise operations do commonly use less power because of the reduced use of resources.

在数字技术算计编程中,一个位运算操作的是一个或多个位组合或者是二进制数字,并且这些操作都是在单个位级别上的。
位运算是直接运行在处理器上的,因此非常简单而快速,常常用于比较或计算数据。
在简易的低成本处理器上,位运算是比除法快很多的,有些情况甚至比乘法和加法还要快。
但是在现代处理器上,由于其更长的指令流水线和其他结构化设计的选择,因此加法和乘法运算可以和位运算一样快,但因为更节省资源,位运算通常更加低能耗,

维基百科对于位运算的介绍


位运算的逻辑运算符

  1. & 与运算

位与运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑与运算。
对于负数,按其补码进行运算。

  1. | 或运算

位或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑或运算。
逻辑运算符||与位或运算符|的区别
条件“或”运算符 (||) 执行 bool 操作数的逻辑“或”运算,但仅在必要时才计算第二个操作数。
x || y , x | y 不同的是,如果 x 为 true,则不计算 y(因为不论 y 为何值,“或”操作的结果都为 true)。这被称作为“短路”计算。

  1. ^ 位异或

位异或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑异或运算。只有当对应位的二进制数互斥的时候,对应位的结果才为真。
4.~ 位非
位非运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑非运算。


应用实例

例如,有一家公司,该公司有a、b、c 三位主管(级别依次由高到低),对于公司出售的产品,主管可以提供报价,但不是每位主管都必须提供报价,因此共有a,b,c,ab,ac,bc,abc七种情况。要求记录每位提供某个产品的报价的主管,且最终有效的报价为其中级别最高的。
现在设计price表,其中ap、 bp 、cp字段,分别表示每位主管提供的报价;p字段表示所有提供了报价的主管,其中a为1、b为2、c为4,p字段存储的是这三个数的和;
例如,b提供了报价100,c提供了报价93,那么ap=null,bp=100,cp=93,p=6(即2+4),其中有效的报价为b的报价100.

判断是否包含某个主管的报价,可以使用与运算:

1 转换为二进制为 0001
2 转换为二进制为 0010
4 转换为二进制为 0100

当p为6时
6 转换为二进制为 0110

6 & 1

0110
&
0001
=0000=0

6 & 2

0110
&
0010
=0010>0

根据是否大于0,可以判断是否包含某个主管的报价;

CREATE TABLE price
(
 id INT PRIMARY KEY,
 ap INT DEFAULT NULL,
 bp INT DEFAULT NULL,
 cp INT DEFAULT NULL,
 p INT DEFAULT NULL
);

INSERT INTO price VALUES 
(1,NULL,100,93,6),
(2,188,170,203,7),
(3,NULL,14,NULL,2);

INSERT INTO price VALUES 
(4,NULL,NULL,NULL,NULL),
(5,44,55,66,7),
(6,NULL,NULL,430,4);


SELECT 
id '产品编号',
CASE WHEN p&ap>0 THEN ap
     WHEN p&bp>0 THEN bp
     WHEN p&cp>0 THEN cp
     ELSE '该产品无有效报价'
     END '有效报价',
CASE WHEN p&ap>0 THEN 'ap'
     WHEN p&bp>0 THEN 'bp'
     WHEN p&cp>0 THEN 'cp'
     ELSE '无'
     END '报价主管' 
FROM price;

查询结果

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 关系型数据库 MySQL
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
96 1
|
1月前
|
SQL 前端开发 关系型数据库
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
49 0
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
|
12天前
|
关系型数据库 MySQL 数据库
【赵渝强老师】启动与关闭MySQL数据库实例
MySQL数据库安装完成后,可以通过命令脚本启动、查看状态、配置开机自启、查看自启列表及关闭数据库。本文提供了详细的操作步骤和示例代码,并附有视频讲解。
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
65 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
53 3
|
1月前
|
Oracle 关系型数据库 MySQL
Mysql(1)—简介及Windows环境下载安装
MySQL 是一个流行的关系型数据库管理系统(RDBMS),基于 SQL 进行操作。它由瑞典 MySQL AB 公司开发,后被 Sun Microsystems 收购,现为 Oracle 产品。MySQL 是最广泛使用的开源数据库之一,适用于 Web 应用程序、数据仓库和企业应用。
55 2
|
1月前
|
存储 关系型数据库 MySQL
mysql 8.0 的 建表 和八种 建表引擎实例
mysql 8.0 的 建表 和八种 建表引擎实例
22 0
|
1月前
|
存储 关系型数据库 MySQL
Key_Value 形式 存储_5级省市城乡划分代码 (mysql 8.0 实例)
本文介绍了如何使用MySQL8.0数据库中的Key_Value形式存储全国统计用区划代码和城乡划分代码(5级),包括导入数据、通过数学函数提取省市区信息,以及查询5级行政区划的详细数据。
32 0
|
1月前
|
算法 关系型数据库 MySQL
复购率 mysql 实例(sample database classicmodels _No.1 )
复购率 mysql 实例(sample database classicmodels _No.1 )
27 0
|
2月前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
187 0
下一篇
无影云桌面