如何读取二进制数作为输入?

新手上路,请多包涵

有没有办法让用户在 C 或 C++ 中输入二进制数?

如果我们写类似

int a = 0b1010;
std::cout << a << std::endl

然后输出为 10(使用适当的编译器扩展时)。

但是当我们尝试写

int n;
std::cin >> n;
int t = 0bn;

它给了我们一个错误,所以任何人都可以建议我们如何直接读取二进制数作为输入而不是使用字符串来存储输入?

原文由 iec2011007 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

这里有一点混乱,让我们稍微解开一下。

  • 0b1010 是一个 _整数文字_,一个常量,编译时整数值,以基数 2 编写。同样, 0xA 是一个基数为 16 的文字,而 10 是以 10 为底。所有这些都指的是同一个整数,这只是告诉编译器你指的是哪个数字的不同方式。在运行时,在内存中,此整数 始终 表示为以 2 为底的数字。

  • std::cout << a ;取 a 的整数值并输出它的字符串表示形式。默认情况下,它以 10 为底输出,但您可以使用 std::hex 修饰符使其以 16 为底输出。没有预定义的修饰符以二进制形式打印。所以你需要自己做(或谷歌,这是一个常见的问题)。

  • 0b 最后, 用于定义整数文字。它 不是 运行时运算符。回想一下,所有 int s 在内存中都表示为以 2 为底的数字。从机器的角度来看,其他碱基不存在, intint ,所以没有什么可以转换的。如果您需要从字符串中读取二进制数,则可以将反向代码滚动到打印它的位置( std::cin >> n 假设输入是基数为 10 的数字,因此如果输入实际上旨在以 2 为底)。

原文由 Alexander Gessler 发布,翻译遵循 CC BY-SA 3.0 许可协议

要将二进制数作为输入,我经常使用两种方法:

主题演讲:将输入作为字符串!!!使用: #include <string>

  1. bitset库的 bitset 模板的 to_ulong() 方法
    • 为此,您需要包含 bitset 库使用 #include <bitset>

例子:

 string s;
cin>>s; // Suppose s = "100100101"
int n = (int) bitset<64>(s).to_ulong();
cout<<n; // 293

在这里 探索更多关于 bitset 和关于 to_ulong() 的信息

  1. string 库的 stoi() 方法
    • 为此,您需要使用 #include <string> 包含 string

例子:

 string s;
cin>>s; // Suppose s = "100100101"
int n = stoi(s, 0, 2);
cout<<n; // 293

此处 探索 stoi() 的格式。

原文由 Deepam Gupta 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题