位运算(算法)

news2024/12/23 22:51:14

目录

  • 一、位运算的知识点
  • 二、位运算的应用
    • 1. x & 1
      • 一个数补码表示中的第k位数字
      • 求补码中含有1的个数
      • 偶数位与奇数位分开输出
    • 2. x & (-x)
      • 返回x的最后一位1及之后的数字
      • 判断一个数是否是2的n次方
      • 求补码中含有1的个数
    • 3. x & (x - 1)
      • 求补码中含有1的个数(微软)
      • 判断一个数是否是2的n次方
      • 两个数补码位上不同数的数量


一、位运算的知识点

位运算两个性质:

  • x & (−x):保留二进制下最后出现1的位置,其余位置为0。(-x 等同于 ~x + 1
  • x & (x − 1):消除二进制下最后出现1的位置,其余保持不变。

x & (x - 1)的原理图:
x & (x − 1)


二、位运算的应用

1. x & 1

一个数补码表示中的第k位数字

int func(int n, int k)
{
	return ((n >> k) & 1);
}

求补码中含有1的个数

int func(int n)
{
	int countn = 0;
	while (n)
	{
		if (n & 1) countn++;
		n = n >> 1;
	}
	return countn;
}

偶数位与奇数位分开输出

void func(int n)
{
	std::cout << "奇数位输出:>";
	for (int i = 31; i >= 1; i -= 2)
	{
		std::cout << ((n >> i) & 1) << ' ';
	}
	std::cout << std::endl << "偶数位输出:>";
	for (int i = 30; i >= 0; i -= 2)
	{
		std::cout << ((n >> i) & 1) << ' ';
	}
}

2. x & (-x)

返回x的最后一位1及之后的数字

lowbit(x):返回x的最后一位1及之后的数字

x=101000 lowbit(x)=1000
x=1010 lowbit(x)=10


判断一个数是否是2的n次方

bool func(int n)
{
	return (n == (n & (-n)));
}

求补码中含有1的个数

int func(int n)
{
	int countn = 0;
	while (n)
	{
		countn++;
		n -= (n & (-n));
	}
	return countn;
}

3. x & (x - 1)

求补码中含有1的个数(微软)

int func(int x)
{
	int countx = 0;
	while (x)
	{
		countx++;
		x = x & (x - 1);
	}
	return x;
}

判断一个数是否是2的n次方

bool func(int x)
{
	x = x & (x - 1);
	return x ? false : true;
}

两个数补码位上不同数的数量

int func(int x, int y)
{
	int ret = x ^ y, count = 0;
	while (ret)
	{
		count++;
		ret = ret & (ret - 1);
	}
	return count;
}

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

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

相关文章

Transformer模型各模块详解及代码实现

Transformer 前言1、Transformer模型整体架构2、Embeeding2.1 词向量2.1.1 独热编码2.1.2 Word Embedding2.1.3 总结 2.2 代码实现 3、Positional Encoding3.1 位置编码简介3.2 代码讲解 4、Multi-Head Attention5、Layer Norm6、Positionwise Feed Forward7、Encoder and Deco…

Qt Creator 的使用技巧

1、Qt Creator 的快捷键 在 Qt Creator 里&#xff0c;假若自己不知道某些功能按钮的快捷键是什么&#xff0c;可以将鼠标移至该按钮 上面就可以知道它的快捷键了。如下图&#xff0c;想知道运行的快捷键是什么&#xff0c;那么我们将鼠标移至 Qt Creator 的左下角的运行…

日常开发中代码技巧(个人使用)

日常开发中代码技巧 String&#xff0c;StringBuffer判断非空 String判断非空 参考&#xff1a;https://blog.csdn.net/Echo_width/article/details/79653704 首先&#xff0c;区分空串和null串 1 空串""是长度为0的字符串&#xff0c;它有自己的串长度&#xff08;…

Python每日一练:小艺读书醉酒的狱卒非降序数组(详解快排)

文章目录 前言一、小艺读书二、醉酒的狱卒三、非降序数组总结 前言 今天这个非降序数组&#xff0c;阅读解理小学水平&#xff0c;说起来都是泪啊。我折腾了一天都没搞定&#xff0c;从冒泡写到快速排序。换了几种都还不行&#xff0c;我又给快排加上插入排序。结果还是不能全…

MySQL--复合查询--0422

注&#xff1a;为了方便查看 mysql语句会有突然的换行&#xff0c;书写时请勿模仿。 目录 1.单表查询回顾 显示工资最高的员工的名字和工作岗位 显示工资高于平均工资的员工信息 2.多表查询 比如需要查询雇员名字和所在部门编号及部门名字。 显示部门号为10的部门名&…

“智慧赋能 强链塑链”——精细化工行业仓储物流数字化转型探讨

精细化工行业作为衡量国家化学工业水平高低的重要标志&#xff0c;为国民经济提供重要的终端产品支持&#xff0c;相比较大化工产品&#xff0c;精细化工产品需要高度专业技能和工艺&#xff0c;其生产过程需要复杂的化学反应&#xff0c;以及严格的控制条件&#xff0c;产出的…

基于 TiDB + Flink 实现的滑动窗口实时累计指标算法

作者&#xff1a;李文杰 前言 在不少的支付分析场景里&#xff0c;大部分累计值指标可以通过 Tn 的方式计算得到 。随着行业大环境由增量市场转为存量市场&#xff0c;产品的运营要求更加精细化、更快速反应&#xff0c;这对各项数据指标的实时性要求已经越来越高。产品如果能…

UDS-19服务的状态掩码字节解析

19服务读DTC信息有01、02、04、06、0A等子服务&#xff0c;使用诊断仪读取DUT数据一般只需发送4字节有效数据&#xff0c;其他无效字节用00或者CC填充&#xff0c;如03 19 02 09 00 00 00 00&#xff0c; 数据分解&#xff1a; 03&#xff1a;表示报文类型未单帧&#xff0c;长…

考研计算机组成原理总结(8)

一.计算机工作过程 计算机工作的过程&#xff0c;即一条条指令工作的过程&#xff1a; 取指令&#xff1a; 1.(PC)—>MAR&#xff0c;把PC存放的指令存储地址传送给MAR3.M(MAR)—>MDR&#xff0c;主存根据地址取出指令存放到MDR中4.(MDR)—>IR&#xff0c;指令从MD…

[golang gin框架] 28.Gin 发送短信,DES加密解,Cookie加密,解密操作

一.发送短信 1.简介 在用户注册的时候,需要发送短信来校验用户以及手机号,达到用户注册的目的,一般有很多短信接口来达到发送短信的操作,比如:云片短信服务,阿里云短信服务, 腾讯云短信服务等等,这里以腾讯云短信服务来发送短信: 腾讯云短信服务相关网址: 短信介绍 发送短信AP…

【计算机视觉 | 目标检测】Grounding DINO:开集目标检测论文解读

介绍一篇较新的目标检测工作&#xff1a; Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection论文地址为&#xff1a; https://arxiv.org/pdf/2303.05499.pdfgithub 地址为&#xff1a; https://github.com/IDEA-Research/GroundingD…

flask框架之----Flask-Mail邮件

介绍&#xff1a; Web应用程序经常需要向用户、客户端、管理员、运维人员等相关人员发送邮件。在Flask框架中提供了Flask-Mail邮件库来管理电子邮件的收发。 安装&#xff1a;flask-mail: pip3 install flask-mail配置&#xff1a; 服务器信息&#xff1a; Flask-Mail &…

ESP32学习笔记 -- ESP32-S3使用NVS存储数据

什么是NVS? 非易失性存储(Non-Volatile Storage)简称NVS,是用来保存一些设备断电后不能丢失的数据,乐鑫的ESP32-S3芯片使用了一套NVS库函数对外置的SPI FLASH进行读、写、擦除等操作。 ESP-IDF通过分区表的方式,在外部SPI FLASH里面开辟一段存储空间(也称作NVS分区),…

Vue3 基础语法

文章目录 1.创建Vue项目1.1创建项目1.2 初始项目 2.vue3 语法2.1 复杂写法2.2 简易写法2.3 reactive&#xff08;对象类型&#xff09;2.4 ref&#xff08;简单类型&#xff09;2.5 computed(计算属性)2.6 watch&#xff08;监听&#xff09; 3.vue3 生命周期4.vue3 组件通信4.…

程序员应该怎么自学才能入门 ?我来聊聊自己的经历

当你想成为一名程序员&#xff0c;如何自学入门是一个非常重要的问题。在这里我分享一下我的经验&#xff0c;希望能对你有所帮助。 首先&#xff0c;为了制定好你的学习路线&#xff0c;你可以在网上的培训机构网站找到一张基础路线图。这张路线图必须是跟行业对标的&#xf…

Leetcode 42 接雨水

Leetcode42接雨水 题解1&#xff1a;正反两扫&#xff08;Simple and effect&#xff09;题解2&#xff1a;DP题解3&#xff1a;单调栈&#xff08;单调栈存储的是下标&#xff0c;满足从栈底到栈顶的下标对应height的元素呈递减&#xff09;题解4&#xff1a;双指针&#xff0…

【CSS系列】第六章 · CSS列表、表格、背景、鼠标属性

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

【数据结构】- 链表之带头(哨兵位)双向循环链表(上)

文章目录 前言&#x1f31f;一、带头双向循环链表&#x1f31f;二、带头双向循环链表结构图&#xff1a;&#x1f31f;三、带头双向循环链表代码实现&#xff1a;&#x1f30f;3.1头插&#xff1a;&#x1f30f;3.2头插流程图&#x1f30f;3.3 尾插&#x1f30f;3.4尾插流程图&…

【CSS系列】第三章 · CSS三大特性和颜色的表示

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

Swagger简单了解

Swagger 介绍 使用swagger你只需要按照它的规范去定义接口及接口相关信息&#xff0c;在通过swagger衍生出来的一系列项目和工具&#xff0c;就可以做到生成各种格式的接口文档&#xff0c;以及在线接口调试页面等等。 官网&#xff1a;https://swagger.io/ knife4j是为javaMVC…