【问题标题】:How to print a decimal into a 32 binary separating it 8 bits如何将十进制打印成 32 位二进制,将其分隔为 8 位
【发布时间】:2019-07-02 06:21:24
【问题描述】:

我正在尝试打印一个 32 位二进制整数,其中 8 位由空格分隔。 ex (00000000 00000000) 然后结果应该用于将来的测试,例如我将集成 512 作为 y。

  #define CHAR_BITS 8

void displayBits(unsigned int n){


int sup = CHAR_BITS*sizeof(int);
while(sup >= 0)
{
    if(n & (((long int)1) << sup) )
        printf("1");
    else
        printf("0");
    sup--;


}
printf("\n");

return;
}

【问题讨论】:

  • 你能试着改一下这个问题吗?这并不能真正传达你想要做什么。也许用期望的输出来表达。
  • 我的代码它的作用是打印 32binary,如 00000000000000000000000.... 而我希望它每八个 0 打印一个空格
  • 如果代码需要“打印 32 位二进制整数”而不是使用 (u)int32_t 而不是 int 并避免 假设 int 是 32 位。
  • 关于:if(n &amp; (((long int)1) &lt;&lt; sup) ) 这有可能导致未定义的行为。移位 1 时,使用unsigned int' or long unsigned int, not long int`

标签: c binary printf bit unsigned


【解决方案1】:

如果您已经有一个在每次循环迭代时打印出单个字符的工作循环,并且i 是循环索引,从 0 开始,那么以下条件将每 8 个字符添加一个空格:

if(i && ((i + 1) % 8 == 0))
{
    putchar(' ');
}

但是,您当前的代码实际上也不能正确生成int 的二进制表示。使用 n 的值 1 对其进行测试并检查其输出。我看到100000000000000000000000000000001

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2013-12-26
    • 2019-09-09
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多