十进制转二进制算法

10:1010
 5:101
 2:10
 1:1
算法描述:首先用1去与一个数进行与运算,如果返回真说明这个数对应的二进制数的末尾为1,否则为0
  把得到结果存储到一个字符数组中,然后让这个数除以2,此时,尾数就是上次的倒数第二个数,
  重复这个算法,直到这个数为0,退出循环。
  得到的结果一定的这个数二进制的反序,此时只要写一个反序算法即可。
关于位与运算:首先把两个操作数转换为二进制,而数在内存中就是以二进制存放(因此本算法效率极高),按对应的位进行比较
  当且仅当两个操作数相同的位上的数都为1结果为1
  比如
   10:1010
         &
    7:0111
    2:0010
 10&7==2
图片
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int toBinary(int n, char *binary);
void reverse(char *str, int length);
void main()
{
 /*由于计算机和internet都没有将一个负转换为二进制数,将本算法稍经修改即可*/
 int number=0;
 char binary[20] = { 0 };
 int length = 0;
 scanf("%d",&number);
 length = toBinary(number, binary);
 reverse(binary, length);
 printf("%d对应的二进制数:",number);
 puts(binary);
 system("pause");
}
//倒叙用位与运算取每一个二进制位
int toBinary(int n, char *binary)
{
 int temp = 1;
 int i = 0;
 while (n != 0)
 {
  //核心算法
  binary[i++] = (n & temp == 1) ? '1' : '0';
  n /= 2;
 }
 binary[i] = 0;
 return i;
}
//数组反转算法
void reverse(char *str, int length)
{
 int i = 0;
 char temp;
 for (i = 0; i < length / 2; i++)
 {
  temp = str[i];
  str[i] = str[length - i - 1];
  str[length - i - 1] = temp;
 }
 str[length] = 0;
}

转载于:https://www.cnblogs.com/chaeyeon/p/6144438.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值