【问题标题】:Printing in binary format (user defined function) [duplicate]以二进制格式打印(用户定义函数)[重复]
【发布时间】:2020-11-10 12:42:12
【问题描述】:

我在 C++ 中实现了print_in_binary_format() 函数,它(如名称所述)以二进制形式打印 8 位数字:

void print_in_binary_format(std::uint8_t number)
{
    for (int bit_index = 7; bit_index >= 0; --bit_index) {
        std::cout << ((number & (1U << bit_index)) ? '1' : '0');
    }
    std::cout << '\n';
}

但它没有按预期工作,即:

  • 输入:2

  • 输出:00110010

  • 输入:0

  • 输出:00110000

我知道在 C++ 中我可以使用 bitset 库,但事实并非如此。 我想知道这个功能是怎么回事,我的脑子卡住了!

有整个程序可以测试:

#include <cstdint>
#include <iostream>



std::uint8_t read_user_number();
void print_in_binary_format(std::uint8_t number);



int main()
{
    std::uint8_t number {};
    number = read_user_number();
    print_in_binary_format(number);

    return EXIT_SUCCESS;
}



std::uint8_t read_user_number()
{
    std::cout << "Enter a number (0-255): ";
    std::uint8_t user_number {};
    std::cin >> user_number;

    return user_number;
}



void print_in_binary_format(std::uint8_t number)
{
    for (int bit_index = 7; bit_index >= 0; --bit_index) {
        std::cout << ((number & (1U << bit_index)) ? '1' : '0');
    }
    std::cout << '\n';
}

【问题讨论】:

  • 同上,请说明它是如何调用的。
  • 您的功能正在运行。看起来您输入的内容不正确。
  • 为什么不直接使用std::bitset&lt;8&gt;?应该是一个班轮。

标签: c++ binary


【解决方案1】:

问题在于您的输入数据。您提供 2 或 0 作为字符,而不是数字。

让我解释一下:

  • 字符 '2' -> ASCII 0x32,32 是你函数的真正输入,00110010 是 0x32 的位表示。
  • 字符 '0' -> ASCII 0x30 有 00110000 作为二进制表示。

因此上面的功能是有效的。

为了解决问题,请查看您收集输入数据的方式。

我的 2 美分,Ste。

【讨论】:

  • 没错!所以std::uint8_t 类型的输入被理解为 ASCII 字符。
猜你喜欢
  • 1970-01-01
  • 2019-05-24
  • 2011-07-12
  • 1970-01-01
  • 2020-05-09
  • 2018-08-30
  • 1970-01-01
  • 2018-06-15
  • 2021-10-26
相关资源
最近更新 更多