整数转换二进制, 高效使用位运算

整数转换二进制, 高效使用位运算


将十进制数整数转换二进制的方法很多,但是很少有看到使用位运算的方法,我现在分享的方法便是利用C语言能够 对位运算操作高效的特点。对于C语言来说,一个整数在内存里面就是以二进制的形式存储的,所以没有必要再将其经过一系列运算转换成二进制的形式,只要将整数在内存中的二进制表示输出即可。

  1. 递归调用方法:
// 这里使用无符号数作为形参,是为了避免有符号数右移时补符号位
void recursion(unsigned int num)
{
    if (num > 0) {	// 判断是否大于0
        recursion(num >> 1);        // 递归调用,寻找不为0的最高位
        printf("%u", num & 1);      // 找到最高位后才开始输出
    }
}
  1. 循环方法
void circulation(unsigned int num)
{
    unsigned int nFlag = 0;         // 用来标记不为0的最高位
    unsigned int nEachBit = 0;      // 记录每一位的二进制

    // 0x80 00 00 00 = 1000 0000 0000 0000 0000 0000 0000 0000
    for (unsigned int index = 0x80000000; index > 0; index >>= 1) {
        nEachBit = ((num & index) != 0);    // index从最左边的位开始和num与运算,记录其是否为1
        if (nEachBit) {
            nFlag = 1;    // 第一次不为0之后,nFlag会一直是1
        }
        if (nFlag) {
            printf("%u", nEachBit);  // 从第一个不为0的位开始,每一位都输出;
        }
    }
}
  1. 主函数
int main(void)
{
    while (1) {
        printf("请输入一个数:");
        int num = 0;
        scanf("%d", &num);
        printf("它的二进制位:");
        if (0 == num) {   // 避免了整数为0时,没有任何输出的情况
            printf("%d", 0);
        } else {
            recursion(num);
            //circulation(num);
        }
        printf("\n");
    }
    return 0;
}

经测试,此函数可以正常输出 -2147483648 ~ 4294967295 ( 即 -(231) ~ ( 232 - 1 ) )之间的整数,递归方法精炼,也是训练程序员思维的好方式,极力推崇。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值