C++14新特性增加二进制字面值

Posted 奇妙之二进制

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++14新特性增加二进制字面值相关的知识,希望对你有一定的参考价值。

https://en.cppreference.com/w/cpp/language/integer_literal

字面常量表示我们直接写出来的常量值,所见即所得,不具有名称,是纯粹的右值(prvalue)。C++14的标准在C++11的标准上增加了两个让人有那么点小兴奋的特性:

1.二进制数定义,
2.数位分隔。

二进制字面值

二进制字面值可以使用0b或者0B开头来表示,比如:

int i = 0b0100010001;  // 273
int i = 0B0100010001;  // 273,大写B

数位分隔符

可能就是因为提出了2进制数的表示,但是2进制数很冗长,怎么好看点呢?就提出了数位分隔符。我自己这样猜的^_^。数位分隔符不仅可以用在2进制数中,也可以用在8进制,10进制和16进制数中。上面的二进制数不好看,可以4位一个分隔符

int i = 0b01'0001'0001;  // 273

再说10进制数按千位分隔

long k = 1'234'567'890

这样看起来好多了。

无符号声明

无符号字面值可以帮我们强制指定一个字面常量是一个无符号数,通过在字面值后面加上“u”或“U”来指定,例如:

int bin1 = 0b0001'0001u; // 小u
int bin2 = 0b0001'0001U; // 大写u

无符号指定在C++98的标准里已经出现。

类型声明

类型声明在C++98的标准里也已经出现,但是在C++11之后,又补充了指定超长整型的说明符ll和LL,对应类型long long。例如

int m = 0b0100'0001LL; // 超长整形的字面值

注意,不支持Ll、lL这种大小写混合的模式。

字面值整数的类型推导

未指定类型的字面值默认是int,但当这个数超出int所能承载的范围时,按照unsigned int、long int …的顺序推导。

以上是关于C++14新特性增加二进制字面值的主要内容,如果未能解决你的问题,请参考以下文章

C++14新特性增加二进制字面值

C++14的这些新特性,你都知道吗?

C++14的这些新特性,你都知道吗?

C++14的这些新特性,你都知道吗?

79.C++ 中的字面值常量

Literal 字面值 字面量 的理解