当前位置: 首页 > news >正文

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

      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::endianif 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-endianelsestd::cout << "mixed-endian\n";// 2.std::bit_caststatic_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_bitconstexpr auto v3{ 4u }, v4{ 6u };std::cout << std::has_single_bit(v3) << "," << std::has_single_bit(v4) << std::endl; // 1,0// 4.std::bit_ceilusing bin = std::bitset<8>;std::cout << bin(std::bit_ceil(3u)) << "," << bin(std::bit_ceil(9u)) << std::endl; // 00000100,00010000// 5.std::bit_floorstd::cout << bin(std::bit_floor(3u)) << "," << bin(std::bit_floor(9u)) << std::endl; // 00000010,00001000// 6.std::bit_widthstd::cout <<  std::bit_width(0u) << "," << std::bit_width(3u) << std::endl; // 0,2// 7.std::rotlconstexpr std::uint8_t i{ 0b00011101 };std::cout << bin(std::rotl(i, 1)) << "," << bin(std::rotl(i, 4)) << std::endl; // 00111010,11010001// 8.std::rotrstd::cout << bin(std::rotr(i, 1)) << "," << bin(std::rotr(i, 4)) << std::endl; // 10001110,11010001// 9.std::countl_zeroconstexpr std::uint16_t s{ 0b00100011 };std::cout << std::countl_zero(i) << "," << std::countl_zero(s) << std::endl; // 3, 10// 10.std::countl_oneconstexpr std::uint32_t l{ 0b11111111101100110000000011111100 };std::cout << std::dec << std::countl_one(i) << "," << std::countl_one(l) << std::endl; // 0,9// 11.std::countr_zerostd::cout << std::countr_zero(i) << "," << std::countr_zero(l) << std::endl; // 0,2// 12.std::countr_onestd::cout << std::countr_one(i) << "," << std::countr_one(s) << std::endl; // 1,2// 13.std::popcountstd::cout << std::popcount(s) << "," << std::popcount(l) << std::endl; // 3,19return 0;
}

      执行结果如下图所示:

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • k8s的环境配置
  • 【Linux】【Vim】Vim 基础
  • Python 数据分析— Pandas 基本操作(下)
  • 使用QT编写有图形界面的TCP局域网聊天室(app)
  • Excel怎么截图?快速捕捉工作表的多种方法
  • 17. 什么是MyBatis中的TypeHandler?如何自定义TypeHandler处理复杂类型?
  • CentOS 7 安装yum使用报错:Cannot find a valid baseurl for repo: base/7/x86_6
  • 使用Python中的`zip()`函数
  • WPF的**逻辑树**和**可视树**。
  • ARM 工业计算机搭载 FUXA 组态软件:开启智能制造新时代
  • STL-stack/queue/deque(容器适配器)
  • 直播相关03-录制麦克风声音, ffmpeg 命名,使用命令行完成录音
  • 收藏:不错的中兴的数据治理的PPT
  • framebuffer在Ubuntu上的操作
  • python字典和列表学习
  • JavaScript-如何实现克隆(clone)函数
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • js递归,无限分级树形折叠菜单
  • js算法-归并排序(merge_sort)
  • Object.assign方法不能实现深复制
  • Protobuf3语言指南
  • Yii源码解读-服务定位器(Service Locator)
  • 闭包,sync使用细节
  • 漂亮刷新控件-iOS
  • 前端技术周刊 2019-01-14:客户端存储
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 优化 Vue 项目编译文件大小
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • const的用法,特别是用在函数前面与后面的区别
  • ionic入门之数据绑定显示-1
  • 阿里云重庆大学大数据训练营落地分享
  • ​批处理文件中的errorlevel用法
  • ​水经微图Web1.5.0版即将上线
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #Linux(权限管理)
  • #QT(一种朴素的计算器实现方法)
  • (06)Hive——正则表达式
  • (c语言)strcpy函数用法
  • (LLM) 很笨
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (南京观海微电子)——示波器使用介绍
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (转)linux 命令大全
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net MySql
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)