【问题标题】:Converting a decimal to a binary in C (output missing digits)在C中将十进制转换为二进制(输出丢失的数字)
【发布时间】:2023-02-02 10:20:24
【问题描述】:

为什么在二进制数组的长度为 8(即 8 位)时返回 7 位而不是 8 位?

#include <cs50.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    int number = get_int("Number: ");
    char binary[8]; // 8 bits in a byte

    for (int i = 0; number != 0 ; i++)
    {
        if (number % 2 == 0)
        {
            binary[i] = '0';
        }
        else
        {
            binary[i] = '1';
        }
        number /= 2;
    }
    printf("%s\n", binary);
}

我越来越

数量:72

二进制:0001001

我知道它与这个小数的正确答案相反,只是想先更正缺失的数字。

【问题讨论】:

  • 前导零是不是“缺失数字”(顺便说一句,二进制“位”代表“二进制数字”),因为它不会更改值。如果你想要一个固定的 8 位权重,那么你应该运行你的循环进行固定的 8 次迭代,而不是直到数字不为零。
  • 您还需要以 null 终止您的字符串。一种方式是char binary[9] = {0};。 (9 字节给你 8,加上空终止符 1。)
  • 在使用 %s printf 格式说明符打印之前,需要将空终止符附加到 binary 字符串。 char binary[9]; 足以容纳 8 位数字和一个空终止符。

标签: arrays c binary cs50


【解决方案1】:

对于你的程序,我只需要做一个小的更正:

https://ideone.com/87v18W

int main(void)
{
    int number = 145;
    char binary[8+1] = {}; // 8 bits in a byte, + 1 for string-terminator
    // If you're going to print it out as a string, you have to make sure there is space for a nil-terminator ('
猜你喜欢
  • 2014-03-13
  • 2020-10-27
  • 1970-01-01
  • 2012-12-26
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
相关资源
最近更新 更多