有没有办法让用户在 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 许可协议
这里有一点混乱,让我们稍微解开一下。
0b1010
是一个 _整数文字_,一个常量,编译时整数值,以基数 2 编写。同样,0xA
是一个基数为 16 的文字,而10
是以 10 为底。所有这些都指的是同一个整数,这只是告诉编译器你指的是哪个数字的不同方式。在运行时,在内存中,此整数 始终 表示为以 2 为底的数字。std::cout << a
;取a
的整数值并输出它的字符串表示形式。默认情况下,它以 10 为底输出,但您可以使用std::hex
修饰符使其以 16 为底输出。没有预定义的修饰符以二进制形式打印。所以你需要自己做(或谷歌,这是一个常见的问题)。0b
最后, 仅 用于定义整数文字。它 不是 运行时运算符。回想一下,所有int
s 在内存中都表示为以 2 为底的数字。从机器的角度来看,其他碱基不存在,int
是int
,所以没有什么可以转换的。如果您需要从字符串中读取二进制数,则可以将反向代码滚动到打印它的位置(std::cin >> n
假设输入是基数为 10 的数字,因此如果输入实际上旨在以 2 为底)。