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语言重剑无锋,路漫漫求修远兮!

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

  • 相关阅读:
    如何只通过Sandboxed Solution启动一个定时执行的操作
    创建与SharePoint 2010风格一致的下拉菜单 (续) 整合Feature Custom Action框架
    创建与SharePoint 2010风格一致的下拉菜单
    《SharePoint 2010 应用程序开发指南》第二章预览
    SharePoint 2013 App 开发 (1) 什么是SharePoint App?
    使用Jscex增强SharePoint 2010 JavaScript Client Object Model (JSOM)
    搜索范围的管理
    SharePoint 2010 服务应用程序(Service Application)架构(1)
    SharePoint 2010 服务应用程序(Service Application)架构(2)
    SharePoint 2013 App 开发 (2) 建立开发环境
  • 原文地址:https://www.cnblogs.com/ShanShi012/p/5313456.html
Copyright © 2011-2022 走看看