博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
五种境界之 二进制转换为十进制(C语言版)
阅读量:6884 次
发布时间:2019-06-27

本文共 2742 字,大约阅读时间需要 9 分钟。

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

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

翻译:

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

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

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

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

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

同理

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

解答:

C语言四级水平:

1 #include
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("\n");23 return 0;24 }

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

C语言六级水平:

#include
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所指向的值始终为0p--;i--;} printf("\n",*p);return 0;}

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

C语言八级水平:

1 #include
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("\n"); 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
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("\n"); 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
2 #include
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] = '\0'; //C语言中字符输出的结尾是'\0'16 printf("%s\n",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语言重剑无锋,路漫漫求修远兮!

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

 

转载于:https://www.cnblogs.com/ShanShi012/p/5313456.html

你可能感兴趣的文章
OO第四阶段总结
查看>>
javascript总结02
查看>>
创建windows服务
查看>>
HTML5 入门基础
查看>>
【转载】读懂IL代码就这么简单(二)
查看>>
C++文件操作(fstream)
查看>>
用main函数传参做简单的计算器的代码
查看>>
python中struct.unpack的用法
查看>>
体绘制(Volume Rendering)概述之4:光线投射算法(Ray Casting)实现流程和代码(基于CPU的实现)...
查看>>
Python实践之(七)逻辑回归(Logistic Regression)
查看>>
PAT (Advanced Level) 1107. Social Clusters (30)
查看>>
【开源社群系统研发日记五】ThinkSNS+ 是如何计算字符显示长度的
查看>>
Nodejs日志管理log4js
查看>>
python获取昨日日期
查看>>
海康威视 - 萤石云开放平台 js 版
查看>>
关于分销平台
查看>>
剑指offer---12-**--数值的整数次方
查看>>
PAT - L2-010. 排座位(并查集)
查看>>
Linux下chkconfig命令详解(转)
查看>>
EF中,保存实体报错:Validation failed for one or more entities. 如何知道具体错误在哪?...
查看>>