注册 登录
编程论坛 C++教室

关于二进制转换问题!!求解释!!!

蓝xuan 发布于 2012-04-15 16:03, 359 次点击
#include<iostream.h>
#include<stdio.h>
void printb(int,int);
int main()
{
    int x;
    cout<<"请输入X:";
    cin>>x;
    printb(x,sizeof(int)*8);/*x:整数 sizeof(int):int型在内存中所占的字节数sizeof(int)*8:int型对应的位数*/
    putchar('\n');
    return 0;
}
void printb(int x,int n)
{
    if(n>0)
    {
        putchar('0'+((unsigned)(x&(1<<(n-1)))>>(n-1)));
        printb(x,n-1);//递归调用,输出x的后n-1位
    }
}


  putchar('0'+((unsigned)(x&(1<<(n-1)))>>(n-1)));这句不知道什么意思,求解释。。。。

4 回复
#2
lonmaor2012-04-15 17:07
按位与,看情况应该是有个mask 10000000 00000000 00000000 00000000,与X做&操作,逐个输出各位上的数值0 or 1,然后交由putchar()输出。每输出X的一位,mask右移一位。if(0) then putchar('0'), else putchar('1'),也就是'0'+1。
#3
pangding2012-04-15 18:38
楼上正解。
#4
蓝xuan2012-04-17 14:02
谢谢两位版主。。。。
#5
lyswwr2012-04-17 21:25
感谢,我也一直为这问题纠结,终于可松口气了
1