C++ 中的二进制字面量

Posted

技术标签:

【中文标题】C++ 中的二进制字面量【英文标题】:Binary Literals in C++ 【发布时间】:2020-11-02 11:21:57 【问题描述】:

我可以在用户输入 int 值之前在 c++ 中添加二进制字面量前缀吗?

#include <iostream>
using namespace std;

int main () 
 int n1;
 cin>>n1;
 string s1 = to_string(n1); 
  string s2 = "0b";
string s=s2+s1;
int n=stoi(s);
cout<<n;
return 0;

我试过这个但失败了,因为 stoi() 只读取 0 并跳过其余部分

【问题讨论】:

【参考方案1】:

仍然无法直接从标准输入读取二进制数。任何基数的自动检测都不支持"0b",因此当达到'b'stoi() 停止。

如果s 是从标准输入读取的std::string(可能是std::cin &gt;&gt; s;),没有 "0b" 前缀,那么您可以使用

#include <cstdlib>
char* end;
long n = std::strtol(s.c_str(), &end, 2/*radix of 2 denotes binary*/);

检查指针end 以防s 中有无效的二进制数字。

请注意,我使用的是 strtol 而不是 stoi,因为 int 的上限可以小至 32767。

【讨论】:

以上是关于C++ 中的二进制字面量的主要内容,如果未能解决你的问题,请参考以下文章

十六进制浮点字面量

iOS 中的特殊字面量表示方法

3.Javascript数据类型之进制数和字符串

ES6深入浅出-2 新版函数:4 迭代器与生成器-1.字面量增强

javascript中字面量要怎么理解?尤其是函数、数组、对象字面量

托管 C++ 中的逐字字面量? (就像 C# 的 @"blah")