zoukankan      html  css  js  c++  java
  • 五种境界之 二进制转换为十进制(C语言版)

    之前有一个很流行的段子:

    英文:“If you do not leave with me , we will die together.”

    翻译:

    四级水平:如果不滚开,我就和你同归于尽;

    六级水平:你若不离不弃,我必生死相依;

    八级水平:问世间情为何物,直教人生死相许;

    专家水平:天地合,乃敢与君绝;

    活佛水平:你见或者不见,爱就在那里,不增不减。

    同理

    对于问题:“用C语言实现将一个十进制整数转换为二进制数。

    解答:

    C语言四级水平:

     1 #include<stdio.h>
     2 enum BOOL 
     3 {
     4     FALSE = 0,
     5     TRUE = !FALSE
     6 }typedef bool; //这里应用枚举类型重新定义bool类型的原因是应用gcc编译不支持bool类型
     7 int main(void)
     8 {
     9     int i=0,j,N;
    10     bool Num[32];//C语言中整形数4个字节32位
    11     scanf("%d",&N);
    12     while(1)
    13     {
    14     Num[i]=N%2;
    15     N=N/2;
    16     if(N==0)
    17     break;
    18     i++;
    19     }
    20     for(j=i;j>=0;j--)
    21         printf("%d",Num[j]);
    22         printf("
    ");
    23 return 0;
    24 }

    解释说明:将十进制数转换为二进制的最基本的原理是除二取余倒排列。应用一个数组先顺序的将整型数除以二的余数存起来,然后倒序输出。

    C语言六级水平:

    #include<stdio.h>
    int main()
    {
        int Num[32]={0};
        int *p=Num;
        /*
        这里可以分部的写成:
        int *p;
        p=Num;(实际上就是:p=&Num[0];)
        */
        int i=0,n;
        scanf("%d",&n);
    while(n>0)
    {
         *p=n%2;
         i++;   
         n=n/2;
         p++;
    }
    while(i>0)
    {
    printf("%d",*(p-1));//由于在上面的一个while循环中p已经加了1,即完成上面的一个循环后p所指向的值始终为0
    p--;
    i--;
    }
        printf("
    ",*p);
    return 0;
    }

    解释:这里学习了指针之后,可以应用指针来对数组进行操作,仅对本问题而言就是多了一种解决问题的方法,就像从四级到六级扩大了词汇量一样。

    C语言八级水平:

     1 #include<stdio.h>
     2 void Decimal_to_binary(int N);
     3 void main()
     4 {
     5   int N;
     6   scanf("%d",&N);
     7   Decimal_to_binary(N);
     8   printf("
    ");
     9 }
    10 void Decimal_to_binary(int N)
    11 {
    12      if(N)  //if语句只要条件为真即去执行
    13      {
    14        Decimal_to_binary(N/2); //在函数自身中调用自身,即递归的思想
    15        printf("%d",N%2);
    16      }
    17 } 

    解释:应用递归的思想,反复的去去除二取余,在Decimal_to_binary(int N)函数的if语句中第一次调用printf函数是在经过若干次除以二商为零时。

    C语言专家水平:

     1 #include<stdio.h>  
     2 void Decimal_to_binary(int N);
     3 void main()
     4  {
     5    int N;
     6    scanf("%d",&N);
     7    Decimal_to_binary(N);
     8    printf("
    ");
     9  } 
    10 void Decimal_to_binary(int N)  
    11 {  
    12   int i,t;   
    13   t=1<<31;  
    14   for(i=1;i<=32;i++)  
    15   {  
    16     putchar(N&t?'1':'0');  
    17     N=N<<1;  
    18     if(i%8==0)  
    19     printf("  "); 
    20   }  
    21 }  

    解释:该方法的最大特点是引用的C语言的中的位操作,即左移动运算。基本的思想是将1左移动31位,然后循环的对函数Decimal_to_binary(int N)传入的参数进行移位取出每一位与1相与,输出的为结果为0则输出0,结果为1则输出1.

    C语言活佛水平:

     1 #include<stdio.h>
     2 #include <stdlib.h>
     3 
     4 void Decimal_to_binary(int number)
     5 {
     6      int i=0; 
     7      char *P;
     8      P = (char*)malloc(33); //应用动态内存分配
     9      for(i;i<32;i++)
    10      {
    11          P[i] = number & (1<<(31-i));
    12          P[i] = P[i] >> (31-i);
    13          P[i] = (P[i] == 0) ? '0' : '1';
    14      }
    15      P[i] = ''; //C语言中字符输出的结尾是''
    16      printf("%s
    ",P);
    17      free(P);//释放内存
    18 }
    19 void main()
    20 {
    21    int n;
    22    scanf("%d",&n);
    23    Decimal_to_binary(n);
    24 }

    解释:应用动态内存分配的思想,分配33字节的存储空间,然后应用移位的方法,进行按位操作,最后释放所分配的存储空间。这样做可以最大限度的节省存储空间。

    Sum:C语言重剑无锋,路漫漫求修远兮!

    声明:本文为原创,转载请声明。

  • 相关阅读:
    使用node 创建一个新项目
    安装node 及相关配置
    Java面试查漏补缺
    科学计算软件——Octave安装
    Wine——在Linux上运行Windows软件
    windows和linux中搭建python集成开发环境IDE——如何设置多个python环境
    Ubuntu安装Gnome3
    ubuntu自定义分辨率
    Ubuntu添加开机自动启动程序方法
    sublime Text3及其插件的使用
  • 原文地址:https://www.cnblogs.com/ShanShi012/p/5313456.html
Copyright © 2011-2022 走看看