zoukankan      html  css  js  c++  java
  • 十进制转二进制算法

    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;
    }

  • 相关阅读:
    Linux网络编程“惊群”问题总结
    MySql表结构修改详解
    String和ByteBuffer互转
    Java中String连接性能的分析
    java读取TXT文件的方法
    java文件和文件夹复制、删除、移动操作
    eclipse 导出jar 没有主清单属性的解决方法
    storm集群配置
    storm集群部署和配置过程详解
    Apache Zookeeper 集群环境搭建
  • 原文地址:https://www.cnblogs.com/chaeyeon/p/6144438.html
Copyright © 2011-2022 走看看