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新特性增加二进制字面值的主要内容,如果未能解决你的问题,请参考以下文章