A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小ㄟMò 中级黑马   /  2015-12-26 23:07  /  1303 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不废话,直接上代码:第一种方法:
-----------------
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型的指针函数,但结果不理想,必须得传一个数组进去,这不是我想要的,所以就不贴代码了。




1 个回复

正序浏览
不错不错! 取反+1 = -
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马