C++14中binary literals的使用

2023-11-19

      一个形如42的值被称作字面值常量(literal),这样的值一望而知。每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型。

      我们可以将整型字面值写作十进制(基数为10)、八进制(基数为8)或十六进制(基数为16)数的形式。以0开头的整数代表八进制数,以0x或0X开头的代表十六进制数

      整型字面值具体的数据类型由它的值和符号决定。默认情况下,十进制字面值的带符号数,八进制和十六进制字面值既可能是带符号的也可能是无符号的。十进制字面值的类型是int、long和long long中尺寸最小的那个(例如,三者当中最小是int),当然前提是这种类型要能容纳下当前的值。八进制和十六进制字面值的类型是能容纳其数值的int、unsigned int、long、unsigned long、long long和unsigned long long中的尺寸最小者。如果一个字面值连与之关联的最大的数据类型都放不下,将产生错误。类型short没有对应的字面值。

      尽管整型字面值可以存储在带符号数据类型中,但严格来说,十进制字面值不会是负数。如果我们使用了一个形如-42的负十进制字面值,那个负号并不在字面值之内,它的作用仅仅是对字面值取负值而已。

      指定字面值的类型列表如下:

      注:以上内容主要整理自《C++ Primer(Fifth Edition)》

      测试代码如下所示:

int test_literal_1()
{
	int d = 42; // decimal notation
	int o = 052; // octal notation
	int x = 0x2a; // hexadecimal notation
	int X = 0X2A; // hexadecimal notation
	std::cout << "d:" << d << ", o:" << o << ", x:" << x << ", X:" << X << "\n"; // d:42, o:42, x:42, X:42

	auto v1 = 42U; // or 42u: 将从unsigned int, unsigned long和unsigned long long中选择能匹配的空间最小的一个作为其数据类型
	auto v2 = 42L; // or 42l: 字面值的类型至少是long
	auto v3 = 42UL; // or 42ul: 数据类型将根据具体数值情况或者取unsigned long,或者取unsigned long long
	std::cout << "v1:" << v1 << ", v2:" << v2 << ", v3:" << v3 << "\n"; // v1:42, v2:42, v3:42
	std::cout << "v1 type:" << typeid(v1).name() << ", v2 type:" << typeid(v2).name() << ", v3 type:" << typeid(v3).name() << "\n"; // v1 type:unsigned int, v2 type:long, v3 type:unsigned long

	return 0;
}

      C++14中增加了对二进制字面值常量(binary literal)的支持:以2为基数的数字,数字间可用分隔符’分隔带有0b或0B前缀后面跟着一个或多个二进制数字(0, 1)。

      自C++14起,在整数和浮点数序列中,任意两位数字之间允许使用可选的分隔符’,在确定字面值常量时将忽略它们。

      测试代码如下:

int test_literal_14_1()
{
	auto v1 = 0b110;
	auto v2 = 0b1111'1111;
	auto v3 = 0B1111'1111;
	std::cout << "v1:" << v1 << ", v2:" << v2 <<", v3:" << v3 << "\n"; // v1:6, v2:255, v3:255
	std::cout << "v1 type:" << typeid(v1).name()
		      << ", v2 type:" << typeid(v2).name()
		      << ", v3 type:" << typeid(v3).name() << "\n"; // v1 type:int, v2 type:int, v3 type:int

	auto v4 = 0b10U;
	auto v5 = 0B10L;
	auto v6 = 0b0000'0010ULL;
	std::cout << "v4:" << v4 << ", v5:" << v5 << ", v6:" << v6 << "\n"; // v4:2, v5:2, v6:2
	std::cout << "v4 type:" << typeid(v4).name()
			  << ", v5 type:" << typeid(v5).name()
			  << ", v6 type:" << typeid(v6).name() << "\n"; // v4 type:unsigned int, v5 type:long, v6 type:unsigned __int64

	return 0;
}

      执行结果如下所示:注意:std::type_info::name在windows和linux输出的差异

      GitHubhttps://github.com/fengbingchun/Messy_Test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++14中binary literals的使用 的相关文章

  • C语言中的弱符号与强符号介绍

    弱符号 Weak symbol 是链接器 ld 在生成ELF Executable and Linkable Format 缩写为ELF 可执行和可链接格式 是一种用于可执行文件 目标文件 共享库和核心转储的标准文件格式 ELF文件有两种索
  • C++/C++11中头文件algorithm的使用

  • C++11中模板类std::enable_shared_from_this的使用

    C 11中的模板类template
  • C++11容器中新增加的emplace相关函数的使用

    C 11中 针对顺序容器 如vector deque list 新标准引入了三个新成员 emplace front emplace和emplace back 这些操作构造而不是拷贝元素 这些操作分别对应push front insert和p
  • C++/C++11中引用的使用

    引用 reference 是一种复合类型 compound type 引用为对象起了另外一个名字 引用类型引用 refer to 另外一种类型 通过将声明符写成 d的形式来定义引用类型 其中d是声明的变量名 一 一般引用 一般在初始化变量时
  • log库spdlog简介及使用

    spdlog是一个开源的 快速的 仅有头文件的C 11 日志库 code地址在 https github com gabime spdlog 目前最新的发布版本为0 14 0 它提供了向流 标准输出 文件 系统日志 调试器等目标输出日志的能
  • OpenCV代码提取:遍历指定目录下指定文件的实现

    OpenCV 3 1之前的版本 在contrib目录下有提供遍历文件的函数 用起来比较方便 但是在最新的OpenCV 3 1版本给去除掉了 为了以后使用方便 这里将OpenCV 2 4 9中相关的函数给提取了出来 适合在Windows 64
  • C语言中signal函数简介及使用

    signal h是C标准函数库中的信号处理部分 定义了程序执行时如何处理不同的信号 信号用作进程间通信 报告异常行为 如除零 用户的一些按键组合 如同时按下Ctrl与C键 产生信号SIGINT C 中的对应头文件是csignal C语言标准
  • 提高C++性能的编程技术笔记:引用计数+测试代码

    引用计数 reference counting 基本思想是将销毁对象的职责从客户端代码转移到对象本身 对象跟踪记录自身当前被引用的数目 在引用计数达到零时自行销毁 换句话说 对象不再被使用时自行销毁 引用计数和执行速度之间的关系是与上下文紧
  • C++中的内存对齐介绍

    网上有很多介绍字节对齐或数据对齐或内存对齐的文章 虽然名字不一样 但是介绍的内容大致都是相同的 这里以内存对齐相称 注 以下内容主要来自网络 内存对齐 通常也称为数据对齐 是计算机对数据类型合法地址做出了一些限制 要求某种类型对象的地址必须
  • 程序员的自我修养--链接、装载与库笔记:Linux共享库的组织

    共享库 Shared Library 概念 其实从文件结构上来讲 共享库和共享对象没什么区别 Linux下的共享库就是普通的ELF共享对象 由于共享对象可以被各个程序之间共享 所以它也就成为了库的很好的存在形式 很多库的开发者都以共享对象的
  • 内存检测工具Dr. Memory的使用

    Dr Memory是一个内存调试工具 它是一个开源免费的内存检测工具 它能够及时发现内存相关的编程错误 比如未初始化访问 内存非法访问 数组越界读 写 以及内存泄露等 它可以在Linux Windows Mac OS和Android操作系统
  • json11库的使用

    JSON JavaScript Object Notation 是一种轻量级的文本数据交换格式 易于让人阅读 同时也易于机器解析和生成 尽管JSON是Javascript的一个子集 但JSON是独立于语言的文本格式 并且采用了类似于C语言家
  • C++中vector的使用

    向量std vector是一种对象实体 能够容纳许多各种类型相同的元素 包括用户自定义的类 因此又被称为序列容器 与string相同 vector同属于STL Standard Template Library 中的一种自定义的数据类型 可
  • CSV文件简介及C++实现

    逗号分隔值 Comma Separated Values CSV 有时也称为字符分隔值 因为分隔字符也可以不是逗号 其文件以纯文本形式存储表格数据 数字和文本 纯文本意味着该文件是一个字符序列 不含必须象二进制数字那样被解读的数据 CSV文
  • 程序员的自我修养--链接、装载与库笔记:目标文件里有什么

    编译器编译源代码后生成的文件叫做目标文件 目标文件从结构上讲 它是已经编译后的可执行文件格式 只是还没有经过链接的过程 其中可能有些符号或有些地址还没有被调整 其实它本身就是按照可执行文件格式存储的 只是跟真正的可执行文件在结构上稍有不同
  • C++/C++11中头文件iterator的使用

  • 开源库jemalloc简介

    jemalloc是通用的malloc 3 实现 它强调避免碎片和可扩展的并发支持 它的源码位于https github com jemalloc jemalloc 最新稳定版本为5 2 1 glibc的内存分配算法是基于dlmalloc实现
  • C++14中binary literals的使用

    一个形如42的值被称作字面值常量 literal 这样的值一望而知 每个字面值常量都对应一种数据类型 字面值常量的形式和值决定了它的数据类型 我们可以将整型字面值写作十进制 基数为10 八进制 基数为8 或十六进制 基数为16 数的形式 以
  • C++17中utf-8 character literal的使用

    一个形如42的值被称作字面值常量 literal 这样的值一望而知 每个字面值常量都对应一种数据类型 字面值常量的形式和值决定了它的数据类型 由单引号括起来的一个字符称为char型字面值 双引号括起来的零个或多个字符则构成字符串型字面值 字

随机推荐

  • 今天一次性给你讲清楚:File、Blob、FileReader、ArrayBuffer、Base64

    Blob Blob 全称为 binary large object 即二进制大对象 blob对象本质上是js中的一个对象 里面可以储存大量的二进制编码格式的数据 Blob 对象一个不可修改 从Blob中读取内容的唯一方法是使用 FileRe
  • 如何搭建Python开发环境

    目录 一 要求及注意 可选 二 安装Anaconda 三 设置环境变量 四 Pycharm的安装及配置及conda虚拟环境的创建 一 要求及注意 1 要求 操作为 Windows 10 及以上 推荐 64 位 2 注意 系统登录名 非显示名
  • 交通部809协议服务器代码,部标平台检测(三).交通部部标809协议测试和运行测试

    本身交通部在制定jt t 809协议文档时 过度设计 采用双链路的复杂的通信架构 文档中文字抽象 而且歧义是很多的 开发者很容易疑惑 产生各种不确定和疑惑 又没有人答疑 全靠摸索 在加上交通部部表809的测试相对比较困难 因为你在开发的时候
  • Python字符串替换方法replace

    字符串替换方法replace str1 replace old str new str count 字符串的替换 将str1中的 old str 替换成new str old str 将要被替换的字符串 new str 新的字符串 替换成的
  • 认识shell

    Shell俗称 壳 他提供了用户和内核进行交互操作的一种接口 它接收用户输入的命令并把它送入到内核中去执行 Shell实际上是一个命令解释器 它通过解释用户输入的命令并把它传输到系统内核中去执行 Shell有自己的编程语言用于对命令的编辑
  • 贪心算法解汽车加油问题——算法解题报告

    一辆汽车加满油后可行驶n公里 旅途中有若干个加油站 设计一个有效算法 指出应在哪些加油站停靠加油 使沿途加油次数最少 对于给定的n n lt 5000 和k k lt 1000 个加油站位置 编程计算最少加油次数 并证明算法能产生一个最优解
  • 多线程(六):多线程案例

    多线程最最经典案例就是上一章的单例设计模式 当然除了单例设计模式 还有其他的案例 本章就 一一 来介绍 阻塞队列 这里是第一次提到阻塞队列这个东西 简单介绍一下 什么是阻塞队列 阻塞队列 BlockingQueue 是一个支持两个附加操作的
  • 连续和离散傅立叶变换总结及推导

    连续时间复指数信号 e j w 0 t e jw 0t ejw0 t 是否为周期信号 x t x t T x t x t T x t x t T 现假设 x t e j w 0 t x t e jw 0t x t ejw0 t e j w
  • C++反汇编 利用反汇编分析常见C/C++语句的底层实现(硬核)

    文章目录 赋值操作 if条件判断 指针和引用的实质 跳转函数 两个数字的交换操作 数组的赋值及 858993460数字的由来 总结 本节我们利用反汇编技术来对我们最常见的C语言语句进行解析 C 反汇编技术可以让你更好的理解C C语言的底层含
  • sam初识+sam详解

    SAM是什么 也许大家在网上看了许多的关于sam的传奇的故事吧 那么今天就让我 偏执狂带你们进入sam的所有吧 第一节 初级认识sam 微软做了两个不同的系统骨架 一个叫Win32 我们用的Win9x Me系统就附在它上面 另一个叫NT N
  • IM通讯设计

    1 系统架构 2 网络架构 3 发送消息的过程
  • [550]sklearn-preprocessing使用

    标准化 Z Score 公式为 X mean std 计算时对每个属性 每列分别进行 将数据按期属性 按列进行 减去其均值 并处以其方差 得到的结果是 对于每个属性 每列来说所有数据都聚集在0附近 方差为1 使用sklearn prepro
  • 经典SQL面试题讲解(11-20)

    本文转自公众号俊红的数据分析之路 本篇节选自书籍 对比Excel 轻松学习SQL数据分析 一书 主要讲解数据分析面试中常见的30道SQL面试题 1 10题见 几道经典SQL面试题讲解 11 行列互换 现在我们有下面这么一个表row col
  • POJ-1458最长公共子序列

    给定序列的子序列是给定序列 其中遗漏了一些元素 可能没有 给定序列X
  • CentOS 防火墙配置(firewall)

    常用的防火墙配置命令 查看所有防火墙规则 firewall cmd list all zones 查看当前区域防火墙规则 firewall cmd list all 添加一个开放服务规则 firewall cmd add service s
  • C++笔记九(STL:基础知识、string、vector、deque)

    1 STL基础 1 1为了建立数据结构与算法的一套标准 诞生了STL STL 标准模板库 广义分为 容器 算法 迭代器 容器与算法之间通过迭代器进行无缝连接 STL 所有代码基本上都采用了类模板和函数模板 1 2 STL六大组件 分别为 容
  • 山石岩读丨一文读懂区块链安全:区块链到底是什么?

    当2017年比特币在全球各种加密交易中达到19000美元的峰值时 加密数字货币就吸引了不仅限于技术爱好者和挖矿者 交易者的全世界范围的广泛关注 随后 使比特币成为可能的区块链技术也作为新兴主流技术之一进入了人们的视野 从产品营销人员到网络专
  • jmeter实现随机数,MD5加密压测投票接口

    1 新增HTTP请求 nonStr为随机值 sign为加密参数 2 在线程组下添加前置处理器 BeanShell PreProcessor 代码如下 import org apache commons codec digest Digest
  • c++ make_shared

    make shared的使用 shared ptr
  • C++14中binary literals的使用

    一个形如42的值被称作字面值常量 literal 这样的值一望而知 每个字面值常量都对应一种数据类型 字面值常量的形式和值决定了它的数据类型 我们可以将整型字面值写作十进制 基数为10 八进制 基数为8 或十六进制 基数为16 数的形式 以