C++14中binary literals的使用详解

 更新时间:2023年06月12日 10:07:03   作者:fengbingchun  
这篇文章主要介绍了C++14中binary literals的使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

      一个形如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

到此这篇关于C++14中binary literals的使用的文章就介绍到这了,更多相关C++binary literals使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c++ 智能指针基础详解

    c++ 智能指针基础详解

    这篇文章主要介绍了c++ 智能指针基础的相关资料,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下
    2021-02-02
  • C语言中qsort函数用法实例小结

    C语言中qsort函数用法实例小结

    这篇文章主要介绍了C语言中qsort函数用法,包括了针对各种数据类型参数的排序,非常具有实用价值,需要的朋友可以参考下
    2014-09-09
  • 基于malloc与free函数的实现代码及分析

    基于malloc与free函数的实现代码及分析

    本篇文章介绍了malloc与free函数的实现代码及分析。需要的朋友参考下
    2013-05-05
  • c++友元函数与友元类的深入解析

    c++友元函数与友元类的深入解析

    友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样
    2013-07-07
  • C++ primer超详细讲解顺序容器

    C++ primer超详细讲解顺序容器

    本文主要介绍了C++顺序容器(vector、deque、list)的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • c++中的bind使用方法

    c++中的bind使用方法

    bind是这样一种机制,它可以预先把指定可调用实体的某些参数绑定到已有的变量,产生一个新的可调用实体,这种机制在回调函数的使用过程中也颇为有用。接下来通过本文给大家介绍c++中的bind使用方法,感兴趣的朋友一起看看吧
    2022-01-01
  • Linux搭建C++开发调试环境的方法步骤

    Linux搭建C++开发调试环境的方法步骤

    这篇文章主要介绍了Linux搭建C++开发调试环境的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • C语言移除元素的三种思路讲解

    C语言移除元素的三种思路讲解

    这篇文章主要介绍了C语言移除元素的三种思路,总的来说这并不是一道难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路
    2022-10-10
  • C++ ofstream与ifstream详细用法

    C++ ofstream与ifstream详细用法

    ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间
    2013-07-07
  • C++实现页面的缓冲区管理器

    C++实现页面的缓冲区管理器

    这篇文章主要介绍了C++实现页面的缓冲区管理器,文章围绕主题展开详细的内容介绍具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08

最新评论