有没有办法打印位而不使用C中的循环?

Nik*_*ani 9 c bit-manipulation

现在,我做的是这样的:

void print_bits(unsigned int x)
{
    int i;
    for(i=WORD_SIZE-1; i>=0; i--) {
        (x & (1 << i)) ? putchar('1') : putchar('0');
    }
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

另外,有一个独立于字大小的解决方案(在我的例子中当前设置为32)会很棒.

cma*_*ter 3

这个怎么样:

void print2Bits(int a) {
    char* table[] = {
        "00",
        "01",
        "10",
        "11"
    };
    puts(table[a & 3]);
}

void printByte(int a) {
    print2Bits(a >> 6);
    print2Bits(a >> 4);
    print2Bits(a >> 2);
    print2Bits(a);
}

void print32Bits(int a) {
    printByte(a >> 24);
    printByte(a >> 16);
    printByte(a >> 8);
    printByte(a);
}
Run Code Online (Sandbox Code Playgroud)

我认为,这就是您在没有循环的情况下编写二进制数的结束。

  • @barakmanos 这就是为什么我永远不会自己写它。但OP要求这样做:-) (2认同)