回 帖 发 新 帖 刷新版面

主题:C++程序,求解释

此程序是十进制向二进制的转换。
源程序:
int main()
{
    int a;
    std::cin>>a;
    printb(a, sizeof(int) * 8);
    return (0);
}

int printb(int a, int n)
{
    if (n > 0)
    {
        putchar('0' + ((unsigned)(a & (1 << (n - 1))) >> (n - 1)));
        printb(a, n - 1);
    }
    return(0);
}
不解的地方是printb()函数的这一句:
putchar('0' + ((unsigned)(a & (1 << (n - 1))) >> (n - 1)));
希望有高手能解释一下它是如何起作用的。

回复列表 (共5个回复)

沙发

没人知道么?汗。。。

板凳


[em3]

3 楼

putchar('0' + ((unsigned)(a & (1 << (n - 1))) >> (n - 1)));
printb递归调用输出二进制的a。比如32位下int a = 2;
printb( a, 32 ) ==> 00000000 00000000 00000000 00000010

4 楼

putchar( '0' + ((a>>(n-1))&1) );

5 楼

putchar( '0' +(int) (((unsigned)a>>(n-1))&1) );可能更安全些。

我来回复

您尚未登录,请登录后再回复。点此登录或注册