黑马程序员技术交流社区

标题: 以二进制的形式打印一个整数 [打印本页]

作者: 小ㄟMò    时间: 2015-12-26 23:07
标题: 以二进制的形式打印一个整数
不废话,直接上代码:第一种方法:
-----------------
void binaryPrint(int num) {

    //  定义binary = 0b 1000 0000 0000 0000 0000 0000 0000 0000
    unsigned int binary = 0x80000000;

    //  out用来暂存并输出每一位的结果
    int out = 0;

    //考虑num为负数的情况
    if (num<0) {
        num = ~num+1;
        printf("-");
    }

    /**
     *  用binary与num按位与,得到num最高位(32位)的值,然后右移31位到最低位,最后以十进制打印出来;
        binary右移一位,再次与num按位与得到第31位的值,然后右移30位到最低位,最后以十进制打印出来;
        同理,以此类推……
     */
    for (int i = 0; i<32; i++, binary>>=1) {

        out = (num&binary)>>(31-i);     //实现算法

        printf("%d",out);

        //按四位分开,便于观察
        if (0 == (i+1)%4) {
            printf(" ");
        }
    }
    printf("\n");
}


第二种方法:
------------------
void binaryPrint(int num) {

    int out;

    //考虑num为负数的情况
    if (num<0) {
        num = ~num+1;
        printf("-");
    }

    for(int i = 0; i<32; i++) {

        out = num>>(31-i)&1;    //实现算法

        printf("%d",out);

        if (0 == (i+1)%4) {
            printf(" ");
        }
    }
    printf("\n");

}

    两种方法类似,原理都是利用“按位与”来实现的。第一种方法是我首先想到的,第二种方法是得到了朋友的提示,然后写出来的。

    代码已贴上,欢迎指正,各位大神若是有什么更好的方法一起分享哈…………

    后面想改成带返回值的函数,直接返回输出的二进制的位数。我试了用int型的指针函数,但结果不理想,必须得传一个数组进去,这不是我想要的,所以就不贴代码了。





作者: yolande    时间: 2015-12-27 22:49
不错不错! 取反+1 = -




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2