C++20中头文件bit的使用

news2024/9/21 18:41:01

      C++20中头文件bit是数字库(numeric library)的一部分,定义用于访问、操作和处理单个位和位序列(individual bits and sequences of bits)的函数

      1.std::endian:指示标量类型的字节序(byte order),支持little(小端序)、big(大端序)、native:

      如果所有标量类型都是小端序,则std::endian::native等于std::endian::little。如果所有标量类型都是大端序,则std::endian::native等于 std::endian::big。

      如果所有标量类型的sizeof都等于1,则字节序无关紧要,并且所有三个值std::endian::little、std::endian::big和std::endian::native都相同。

      如果平台使用混合字节序,则std::endian::native既不等于std::endian::big,也不等于std::endian::little。

      2.std::bit_cast:将一种类型的对象表示重新解释为另一种类型的对象表示

      3.std::has_single_bit:检查一个数字是否是2的整数幂

      4.std::bit_ceil:找到不小于给定值的最小的2的整数幂

      5.std::bit_floor:找到不大于给定值的最大2的整数幂

      6.std::bit_width:找到表示给定值所需的最小位数

      7.std::rotl:计算按位左循环(left-rotation)的结果

      8.std::rotr:计算按位右循环(right-rotation)的结果

      9.std::countl_zero:从最高有效位开始计算连续0 bits的个数

      10.std::countl_one:从最高有效位开始计算连续1 bits的个数

      11.std::countr_zero:从最低有效位开始计算连续0 bits的个数

      12.std::countr_one:从最低有效位开始计算连续1 bits的个数

      13.std::popcount:计算无符号整数中1 bits的个数。

      以下为测试代码:

int test_bit()
{
	// 1.std::endian
    if constexpr (std::endian::native == std::endian::big)
        std::cout << "big-endian\n";
    else if constexpr (std::endian::native == std::endian::little)
        std::cout << "little-endian\n"; // little-endian
    else
        std::cout << "mixed-endian\n";

    // 2.std::bit_cast
    static_assert(sizeof(float) == sizeof(uint32_t));
    constexpr float value{ 123.456f };
    uint32_t v1 = std::bit_cast<uint32_t>(value);
    float v2 = std::bit_cast<float>(v1);
    std::cout << std::hex << "v1: " << v1 << ", v2: " << v2 << std::dec << std::endl; // v1: 42f6e979, v2: 123.456

    // 3.std::has_single_bit
    constexpr auto v3{ 4u }, v4{ 6u };
    std::cout << std::has_single_bit(v3) << "," << std::has_single_bit(v4) << std::endl; // 1,0

    // 4.std::bit_ceil
    using bin = std::bitset<8>;
    std::cout << bin(std::bit_ceil(3u)) << "," << bin(std::bit_ceil(9u)) << std::endl; // 00000100,00010000

    // 5.std::bit_floor
    std::cout << bin(std::bit_floor(3u)) << "," << bin(std::bit_floor(9u)) << std::endl; // 00000010,00001000

    // 6.std::bit_width
    std::cout <<  std::bit_width(0u) << "," << std::bit_width(3u) << std::endl; // 0,2
    
    // 7.std::rotl
    constexpr std::uint8_t i{ 0b00011101 };
    std::cout << bin(std::rotl(i, 1)) << "," << bin(std::rotl(i, 4)) << std::endl; // 00111010,11010001
    
    // 8.std::rotr
    std::cout << bin(std::rotr(i, 1)) << "," << bin(std::rotr(i, 4)) << std::endl; // 10001110,11010001
    
    // 9.std::countl_zero
    constexpr std::uint16_t s{ 0b00100011 };
    std::cout << std::countl_zero(i) << "," << std::countl_zero(s) << std::endl; // 3, 10

    // 10.std::countl_one
    constexpr std::uint32_t l{ 0b11111111101100110000000011111100 };
    std::cout << std::dec << std::countl_one(i) << "," << std::countl_one(l) << std::endl; // 0,9

    // 11.std::countr_zero
    std::cout << std::countr_zero(i) << "," << std::countr_zero(l) << std::endl; // 0,2

    // 12.std::countr_one
    std::cout << std::countr_one(i) << "," << std::countr_one(s) << std::endl; // 1,2

    // 13.std::popcount
    std::cout << std::popcount(s) << "," << std::popcount(l) << std::endl; // 3,19

	return 0;
}

      执行结果如下图所示:

      GitHub:https://github.com/fengbingchun/Messy_Test

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

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

相关文章

AI大模型行业深度:行业现状、应用情况、产业链及相关公司深度梳理

随着人工智能技术的迅猛发展&#xff0c;AI大模型已经成为全球科技竞争的焦点、未来产业的关键赛道以及经济发展的新动力&#xff0c;展现出巨大的发展潜力和广阔的应用前景。目前&#xff0c;AI大模型的应用落地引发行业关注。技术的持续进步促使AI大模型的应用逐步从云端向终…

GitLab CI Runner安装

参考文章&#xff1a;[花了两天&#xff0c;搞了Gitlab-Runner CI/CD实现自动化部署&#xff0c;可比Jenkins香太多啦&#xff01;&#xff01;&#xff01;&#xff01;_gitlab的cicd取代jenkens-CSDN博客] Gitlab的CI需要安装CI专用的GitLab Runner&#xff0c;否则跑不起来…

Vue+SpringBoot+数据库整体开发流程 2

本篇是继我的另一篇博客VueSpringBoot数据库整体开发流程 1-CSDN博客 目录 四、前端开发 简单开发 启动项目 五、前后端联通 四、前端开发 简单开发 &#xff08;1&#xff09;直接修改项目的App.vue文件中的route-link&#xff0c; &#xff08;2&#xff09;新建这个Fe…

【北京迅为】《STM32MP157开发板使用手册》- 第二十章 Trusted Firmware-A 移植+第二十一章 U-Boot移植

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

炸裂!新版 SD WebUI Forge 出图速度更快!支持最新Flux 模型!(保姆级安装教程)

大家是不是经常为SD WebUI卡顿、爆显存而苦恼?一启动SD 电脑就开始发烫&#xff0c; 尤其低显存用户屡屡"中招",不得不一遍遍重启。作为AI绘画的必备工具&#xff0c;WebUI却还有这么多"坑"&#xff0c;着实让人不爽!&#x1f620; 好消息是&#xff0c;…

盘点2024年8月Sui生态发展,了解Sui近期成长历程

随着技术的不断沉淀和产品的不断打磨&#xff0c;Sui生态在2024年8月取得了令人欣喜的进步。作为创新的L1协议&#xff0c;Sui不仅在技术革新方面表现突出&#xff0c;还在DeFi、游戏应用和开发者工具等领域展现出强大的潜力。 本篇文章将全面盘点Sui在过去一个月内的技术创新…

Vue3生命周期钩子函数(Vue3生命周期)

前言 Vue 3 引入了一些变化&#xff0c;特别是针对生命周期钩子函数。Vue 3 支持两种API风格&#xff1a;传统的选项式API&#xff08;Options API&#xff09;和新的组合式API&#xff08;Composition API&#xff09;。我们都知道选项式 API 是 Vue 2 中熟悉的语法风格&#…

opencv学习:模板匹配和argparse 模块的代码实现及优缺点

模板匹配 模板匹配算法&#xff08;Template Matching Algorithm&#xff09;&#xff0c;这是一种在图像处理和计算机视觉领域常用的方法&#xff0c;用于在一个大图像中寻找一个小模板图像的位置。模板匹配算法通过滑动窗口的方式在目标图像上移动模板图像&#xff0c;并计算…

数据结构 Java DS——分享部分链表题目 (2)

前言 关于JAVA的链表,笔者已经写了两篇博客来介绍了,今天给笔者们带来第三篇,也是分享了一些笔者写过的,觉得挺好的题目,链接也已经挂上了,笔者们可以去看看 入门数据结构JAVA DS——如何实现简易的单链表(用JAVA实现)-CSDN博客 数据结构 Java DS——链表部分经典题目 (1)-C…

Vue双向数据绑定代码解读

Vue核心基础-CSDN博客 数据双向绑定原理_哔哩哔哩_bilibili 原理示意图 前置知识 reduce()方法 用于链式获取对象的属性值 Object.defineProperty()方法 Object.defineProperty(obj, prop, descriptor) obj&#xff1a;要定义属性的对象。prop&#xff1a;要定义或修改的属性…

睿考网:中级经济师报名条件中的相关工作怎么定义?

在中级经济师报考条件中&#xff0c;明确不同学历需要满足相关工作经验的要求&#xff0c;怎么看我的工作是否为相关工作呢&#xff1f; 1.从事经济类相关的工作岗位 也就是说考生在本单位从事的工作性质需要与经济行业相关&#xff0c;如本单位的财务、会计、审计、出纳等相…

原地旋转数组--189. 轮转数组

189. 轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步:…

传授大伙如何用ai工具优化自己的代码》》拥抱机器时代》》提示词工程

之前在做数据开发时候遇到的问题数据表格批量生成建表的宏出问题了&#xff0c;此时只好硬着头皮写vba代码,此时您想我不会vba也不知道怎么使用但是sql语句建表格式总还是知道的那么此刻开始我们的提示词开发代码时刻 先进行具体提示词开发>>>>>>>>>…

SpringCloud nacos

**************************** 准备工作 首先准备号nacos的镜像 根据镜像创建nacos容器 nacos:container_name: nacosimage: nacos/nacos-server:v2.1.0-slimports: #需要监听三个端口- "8848:8848"- "9848:9848"- "9849:9849"privileged: tr…

Axure高效打造大屏可视化BI数据展示

在使用AxureRP软件设计大屏可视化BI数据显示模板时&#xff0c;我们可以遵循一系列高效的方法和步骤来确保设计的质量和效率。以下是一个详细的教程&#xff0c;指导如何高效地使用AxureRP进行大屏界面设计。 一、确定设计标准与分辨率 通常&#xff0c;大屏可视化设计以标准的…

MySQL事务【后端 13】

MySQL事务 在数据库管理系统中&#xff0c;事务&#xff08;Transaction&#xff09;是一个非常重要的概念&#xff0c;它确保了数据库操作的完整性和一致性。MySQL作为一种流行的关系型数据库管理系统&#xff0c;自然也支持事务处理。本文将深入探讨MySQL事务的基本概念、特性…

基于YOLOv8的PCB缺陷检测算法,加入一种基于内容引导注意力(CGA)的混合融合方案(一)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文内容&#xff1a;针对基于YOLOv8的PCB缺陷检测算法进行性能提升&#xff0c;加入各个创新点做验证性试验。 1&#xff09;提出了一种基于内容引导注意力(CGA)的混合融合方案&#xff0c;mAP0.5由原始的0.966提升至0.975 1.PCB缺陷…

Django 如何全局捕获异常和DEBUG

DEBUG 默认&#xff1a;False 一个开启、关闭调试模式的布尔值。 永远不要在 DEBUG 开启的情况下将网站部署到生产中。 调试模式的主要功能之一是显示详细的错误页面。如果你的应用程序在 DEBUG 为 True 时引发了异常&#xff0c;Django 会显示一个详细的回溯&#xff0c;包…

AplPost使用

请求get 方法 1&#xff0c;添加token 2&#xff0c;填写get 的参数 2,post方法 把对象的形式直接复制到row里面 3&#xff0c;delete方法 可以直接后面拼接参数

CTK框架(八):服务追踪

目录 1.简介 2.实现方式 3.具体实现 3.1.新建插件PluginA​​ 3.2.新建插件PluginB 4.服务追踪的优势 5.应用场景 6.总结 1.简介 CTK服务追踪是一种机制&#xff0c;用于在CTK插件框架中追踪和管理插件提供的服务。当一个插件注册了一个服务到服务注册中心后&#xff0…