位操作相关的函数(C++)
目录
popcount函数
bitset类模板
__builtin_popcount函数
popcount函数
在C++中,std::popcount函数是用来计算一个整数二进制表示中包含的1的个数。不过要注意,这个函数是C++20标准引入的,因此在使用之前,要先确保编译器支持C++20标准。
使用std::popcount非常简单,只需要包含头文件<bit>,然后调用该函数即可。
使用注意:
- popcount只接收无符号的整数类型(unsigned int、unsigned char等),不接受任何浮点型的变量。
- popcount的返回值就是参数中的二进制表示中包含1的个数。
用法示例:
#include <iostream>
#include <bit>
using namespace std;int main() {unsigned int num = 42; // 二进制表示为 101010int count = std::popcount(num); cout << "Number of set bits in " << num << " is: " << count << endl;return 0;
}
// 输出结果:
/* Number of set bits in 42 is: 3 */
- 更多细节见reference:std::popcount - cppreference.com
bitset类模板
bitset是C++标准库中的一个类模板,用于表示固定大小的位序列。std::bitset是一个非常有用的类模板,特别适合处理需要对位进行操作的场景。它提供了方便的方法来设置、获取、计算和转换二进制位序列。
std::bitset可以看作是一个用于表示位序列的容器,其中每一位都可以是0或1。它的大小在创建时就确定了,并且不能动态地调整大小。
以下是std::bitset的基本用法示例:
#include <iostream>
#include <bitset>int main() {// 创建一个包含8位的bitset,初始值的二进制表示为 10101010// 其实可以直接 std::bitset<8> bits(252); std::bitset<8> bits("10101010"); // 获取位数int size = bits.size();std::cout << "Size of the bitset: " << size << std::endl;// 获取特定位的值bool bitValue = bits[3]; // 获取第4位的值,注意索引从右往左数std::cout << "Bit at position 3: " << bitValue << std::endl;// 设置特定位的值bits[2] = 1; // 设置第3位为1std::cout << "Modified bitset: " << bits << std::endl;// 计算1的个数int count = bits.count();std::cout << "Number of set bits: " << count << std::endl;// 将bitset转换为整数unsigned long long num = bits.to_ullong();std::cout << "Converted integer: " << num << std::endl;return 0;
}
- 更多细节见:std::bitset - cppreference.com
__builtin_popcount函数
另外,还有一个__builtin_popcount函数可以用来计算一个整数中设置为1的位的数量。它的返回值就是给定整数的二进制表示中1的个数。
用法示例:
int __builtin_popcount(unsigned int x); // 适用于32位整数
int __builtin_popcountll(unsigned long long x); // 适用于64位整数
但有一个关键点需要注意:__builtin_popcount是一种编译器特定的扩展,并不是C++标准中所包含的,在不同的编译器和编程环境中可能表现不一致或不可用。所以__builtin_popcount函数限制了代码的可移植性。
相关文章:
位操作相关的函数(C++)
目录 popcount函数 bitset类模板 __builtin_popcount函数 popcount函数 在C中,std::popcount函数是用来计算一个整数二进制表示中包含的1的个数。不过要注意,这个函数是C20标准引入的,因此在使用之前,要先确保编译器支持C20标…...
arm 函数栈回溯
大概意思就是arm每个函数开始都会将PC、LR、SP以及FP四个寄存器入栈。 下面我们看一下这四个寄存器里面保存的是什么内存 arm-linux-gnueabi-gcc unwind.c -mapcs -w -g -o unwind(需要加上-mapcs才会严格按照上面说的入栈) #include <stdio.h> …...
30个前端开发中常用的JavaScript函数
🧑💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 前言 在前端开发中通常会用到校验函数…...
基于量子同态加密的改进多方量子私有比较
摘要量子同态加密在隐私保护方面具有明显的优势。本文提出了一种改进的基于量子同态加密的多方量子私钥比较协议。首先,引入可信密钥中心,安全辅助加密密钥的分发和解密密钥的更新,同时防止恶意服务器发布虚假结果的攻击;在保证所有参与者得到…...
解决mysqld服务启动失败
原因如下: 1、进程占用 首先查看下mysql进程: ps -aux | grep mysql有进程号占用了,kill 这个进程号 再重启服务 2、所有者和所属组为mysql 查看/usr/local/MySQL/data/mysqld.pid所有者和所属组是否为mysql 原来是权限有问题,…...
【前端知识】React 基础巩固(四十)——Navigate导航
React 基础巩固(四十)——Navigate导航 一、Navigate的基本使用 新建Login页面,在Login中引入Navigate,实现点击登陆按钮跳转至/home路径下: import React, { PureComponent } from "react"; import { Navigate } from "reac…...
文件IO练习
一、用read函数完成文件大小计算 #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main(int argc, const char *argv[]) {int fd open("./1.tx…...
初识FreeRTOS入门,对FreeRTOS简介、任务调度、内存管理、通信机制以及IO操作,控制两个led不同频率闪烁
当代嵌入式系统的开发越来越复杂,实时性要求也越来越高。为了满足这些需求,开发者需要使用实时操作系统(RTOS),其中一个流行的选择是FreeRTOS(Free Real-Time Operating System)。本篇博客将详细…...
STM32CUBUMX配置FLASH(W25Q128)--保姆级教程
———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动&#x…...
【Golang 接口自动化04】 解析接口返回JSON串
目录 前言 解析到结构体 json数据与struct字段是如何相匹配的呢? 解析到interface Go类型和JSON类型 实例代码 simpleJson 总结 资料获取方法 前言 上一次我们一起学习了如何解析接口返回的XML数据,这一次我们一起来学习JSON的解析方法。 JSO…...
EPPlus与Microsoft.Office.Interop.Excel的使用区别
文章目录 代码的使用区别EPPlus的工作原理Microsoft.Office.Interop.Excel的使用原理代码的使用区别 static void ExportToExcel(List<(string, double, double)> list, string outputFilePath){//Microsoft.Office.Interop.Excel的使用 /* Excel.Application excelAp…...
ncrack工具使用说明
介绍 网络认证破解工具。 Ncrack是用于网络身份验证破解的开源工具。 它设计为使用可适应不同网络情况的动态引擎进行高速并行破解。 Ncrack还可以针对特殊情况进行广泛的微调,尽管默认参数的通用性足以覆盖几乎所有情况。 它建立在模块化架构上,可以轻松扩展以支持其他协议…...
第二章:进程管理(处理机/CPU管理)
文章目录 2.1 进程与线程1.进程(1)进程的概念、进程的组成、进程的组织(2)进程控制块PCB(3)进程的状态与转换:五状态模型(4)进程控制(5)进程间的通信①共享存储②消息传递③管道通信(6)父进程与子进程(7)进程的内存空间2.线程 Thread(1)线程的概念(2)线程的实现方式:用户级线…...
MySQL中锁的简介——表级锁-元数据锁、意向锁
1.元数据锁 查看元数据锁 select object_type,object_scheme,object_name,lock_type,lock_duration from perfomance_scheme.metadata_locks;2.意向锁 线程A开启事务后在执行update更新语句时候,会给数据加上行锁,加上行锁以后,会对整张表加…...
React几种避免子组件无效刷新的方案
您好,如果喜欢我的文章,可以关注我的公众号「量子前端」,将不定期关注推送前端好文~ 前言 一个很常见的场景,React中父组件和子组件在一起,子组件不依赖于父组件任何数据,但是会一起发生变化。 在探究原…...
分享亿款好用的PDF编辑工具
所周知,PDF文件是不能够像word/excel/ppt等文件一样,可以被随意编辑的,PDF文件往往只能够被查看,我们无法对它进行编辑,或者对上面的文字进行复制,也不能任意删除上面的页面。但是很多时候,我们…...
AI生成式视频技术来临:Runway Gen-2文本生成视频
Runway Gen-2的官方网站提供了一种文本生成视频的工具。以下是对该工具的介绍: 文本生成视频:Runway Gen-2是一个创新的在线工具,可以将文本转化为视频。用户只需输入文本描述或句子,Runway Gen-2就能自动生成相应的视频内容。这…...
react钩子函数
React组件的生命周期包括多个阶段和方法,用于在组件不同的生命周期时执行特定的操作。以下是React类组件中常见的生命周期方法: 挂载阶段(Mounting Phase): constructor:组件实例化时调用,用于初…...
RISC-V公测平台发布 · 如何在SG2042上玩转k3s
前言 Kubernetes是一个开源的容器管理平台,通过Kubernetes的跨集群管理功能,用户可以方便地进行应用程序的复制、迁移和跨云平台的部署。 而k3s作为Kubernetes的轻量级发行版,相比传统的Kubernetes具有更小的二进制文件大小和更低的资源消耗…...
Linux系统常见小问题
1、新系统在输入命令时,不会自动提示,按上箭头(↑)和下向下箭头(↓)不会匹配之前的输入 以CentOS 为例,可以通过配置 ~/.bashrc 文件来实现按向上箭头显示最相近的命令。以下是具体的实现步骤 …...
城市供水管网抗震可靠性分析方法与系统开发【附程序】
✨ 长期致力于供水管网、抗震可靠性、修复策略、震害预测、系统开发研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)场地效应预测模型与管道地震易损性…...
DeepSpeech终极指南:离线语音识别的深度学习引擎完整实践
DeepSpeech终极指南:离线语音识别的深度学习引擎完整实践 【免费下载链接】DeepSpeech DeepSpeech is an open source embedded (offline, on-device) speech-to-text engine which can run in real time on devices ranging from a Raspberry Pi 4 to high power G…...
TPU加速GAN训练:从Colab实操到混合精度调优
1. 项目概述:为什么在Kaggle/Colab上用TPU训GAN不是“炫技”,而是刚需你有没有试过在笔记本电脑上跑一个DCGAN,等了47分钟,loss曲线刚抖两下,风扇就发出濒死的哀鸣?或者在普通GPU上训StyleGAN2,…...
科技中介机构如何提升服务效率与转化率?
观点作者:科易网-国家科技成果转化(厦门)示范基地 在数智化浪潮席卷全球的今天,科技创新正经历着一场深刻的变革。数据已成为关键生产要素,重塑着创新主体间的关系,也催生了全新的科技成果转化模式。在这一…...
群晖NAS远程SSH配置全解:从权限控制到独立模式实战
1. 为什么群晖的SSH不是“开个开关”就完事——从权限失控风险说起群晖NAS作为家用与小型办公场景中最普及的存储设备,很多人买来装好硬盘、配好共享文件夹,就觉得万事大吉。直到某天想批量处理照片缩略图、想用rsync做异地备份、想部署一个轻量级服务&a…...
E-Hentai Downloader:三步解决漫画批量下载与打包难题的实用指南
E-Hentai Downloader:三步解决漫画批量下载与打包难题的实用指南 【免费下载链接】E-Hentai-Downloader Download E-Hentai archive as zip file 项目地址: https://gitcode.com/gh_mirrors/eh/E-Hentai-Downloader 还在为手动保存上百张漫画图片而烦恼吗&am…...
python非物质非遗文化传承与推广平台系统_h89q9jnr
目录同行可拿货,招校园代理 ,本人源头供货商项目背景核心功能技术实现应用场景项目特色项目技术支持源码获取详细视频演示 :同行可合作点击我获取源码->获取博主联系方式->进我个人主页-->同行可拿货,招校园代理 ,本人源头供货商 项目背景 Python非物质非…...
企业微信外部群如何通过 API 自动化投递结构化小程序卡片
能力介绍 相比于传统的文字链接,结构化的小程序卡片拥有更高的点击率和更规范的视觉展现。该能力允许开发者通过主动调用 API,直接向指定的企业微信外部群投递原生小程序卡片。接口支持自定义动态配置小程序的 appid、首屏页面路径 pagepath(…...
RAG三大冲突与三大死穴及解决方案
RAG :向量召回 稀疏匹配 重排序融合 动态裁剪 —— 冲突根源与工程解法 面向开发者的深度技术解析:揭开 RAG 检索 pipeline 中三个环节的底层冲突,以及幻觉漂移、上下文溢出、检索冗余三大企业级死穴的根治方案。 GitHub 项目地址…...
别再让日志拖慢你的服务器!深入对比C++同步与异步日志的性能差异(附TinyWebServer实测)
C服务器日志性能优化实战:同步与异步方案深度对比 当你的Web服务器开始承载真实流量时,那些看似无害的日志语句可能正在悄悄吞噬着系统性能。我曾在一个电商促销日亲眼目睹,由于同步日志的阻塞导致服务器响应时间从50ms飙升到800ms࿰…...
