unsigned char 转char_C语言编程:十进制转二进制

dce3c61849fe35b7b3c093a2557ebadc.png

往期C语言实战练习 ★ C语言编程:验证哥德巴赫猜想 ★ C语言能打印任意大小的菱形?当然! ★ C语言编程:打印一个圆形 ★  C语言编程:输入一个字符串,然后逆序输出 ★ 求1000以内的水仙花数 ★ C语言编程判断回文数 ★ 随机产生 100 之内的整数并赋值给二维数组 a[3][4],并求所有元素和 ★  C语言编程求阶乘和:1!+2!+3!+ ... + n!

正文开始

+

大家好,我是阿汤哥,今天在后台看到有朋友问十进制转换成二进制,今天我们就来看看这个问题。 你知道,C语言中printf打印数的格式化表示方法有十进制、八进制、十六进制,但没有二进制。 我们需要自己编程实现。 十进制怎么转换成二进制?用“除2取余数,余数再逆向排序法”。 举个例子: 【例】把十进制数13转换成二进制 【步骤】
  1. 13除以2,商为6,余数1
  2. 6除以2,商为3,余数0
  3. 3除以2,商为1,余数1
  4. 1除以2,商为0,余数1
把余数逆序排列,得到:1101 上面是我们笔算手算,那怎么用C语言编程实现? 我们用三个变量a,b,c分别记录每一步的被除数、商、余数。用for循环,循环结束的判断条件是商为0。初始状态,a=13。每一部结束后,商保存到b,余数保存到c,并把商b值赋值给a得到新的被除数,来给下一步用。如此循环往复。 求商和求余数好办,分别用用运算符/和%。 那得到的余数怎么逆序排列?用另外一个变量,设逆序排列后的数为n,这样来做求n: 设n初始为0。 第一步得到的余数1乘以1,再加上n初始值得到新的n=1×1 + 0= 1 第二步得到的余数0乘以10,再加上上一步的n得到新的n=0×10 + 1 = 1 第三步得到的余数1乘以100,再加上上一步的n得到新的n=1× 100 + 1 = 101 第四步得到的余数1乘以1000,再加上上一步的n得到新的n=1×1000 + 101=1101。流程结束。 可以得到,一般的规律是:第i步的n等于第i步余数乘以10的i-1次方,再加上上一步的n。循环结束时,得到的n即为所求。 我们来写代码。 C语言代码
/**
 * Author: 阿汤哥
 * 微信公众号:C语言修仙
 * 功能: 十进制转二进制
 */

# include 
# include 

/*
* 函数功能:十进制转二进制
* @ num:要被还换成二进制的十进制数
* 返回值:二进制数
*
*/
int transfer_10_to_2(int num){
    int a=num, b, c, n=0;
    for (int i = 1; a !=0; i++)
    {
        b = a / 2;    //被除数
        c = a % 2;    //商
        n = c * (int)pow(10,  i-1) + n;  //余数
        a = b;  //新的被除数,供下一步使用
    }

    return n;
}

int main(){
    int number;
    while (1)
    {
        printf("请输入一个十进制数:\n");

        scanf("%d", &number);
        int num = transfer_10_to_2(number);
        printf("%d的二进制输出为:%d\n\n", number, num);
    }

    return 0;
}
运行结果

1437e1631f0546ed5098328c6cfc7dd9.png

往期推荐好文 编程软件下载与安装: ★C语言编程工具的选择 ★ 一步步教你下载安装编程工具CodeBlocks和编写第一个程序 ★一步步教你下载安装编程工具VS2019和编写第一个程序 ★一步步教你下载安装编程工具VC++6.0和编写第一个程序 其他好文★i++和++i有什么区别?★看完你就明白:什么情况下该用int main(int argc, char *argv[])而不是int     main(void)★C语言编程:打印一个圆形★福利:50本C语言电子书免费送了! ★ [必读]C语言学习者常见问题及回答 ★ 硬核!用这个工具看了i++和++i的汇编代码,小白也能明白它们的区别

46decab50273f0e9799f529ddb62f680.png

点个在看

你最好看

6e7111457b444e7646e4223edf83d560.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值