帮忙讲解一下 这个二进制转十进制整数转十进制的C语言 写注释就好

在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现
相关函数: atof, atoi, atol, strtod, strtoul
表头文件: #include &stdlib.h&
定义函数: long int strtol(const char *nptr, char **endptr, int base);
函数的解释说明
这个函数会将参数nptr字符串根据参数base来转换成长整型数。参数base范围从2至36,或0。参数base代表采的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换,但遇到如&0x&前置字符则会使用16进制做转换、遇到&0&前置字符而不是&0x&的时候会使用8进制做转换。一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回;若参数endptr为NULL,则会不返回非法字符串。
strtol是atoi的增强版
主要体现在这几方面:
1.不仅可以识别十进制整数,还可以识别其它进制的整数,取决于base参数,比如strtol("0XDEADbeE~~", NULL, 16)返回0xdeadbee的值,strtol("0777~~", NULL, 8)返回0777的值。
2.endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。例如char * strtol("123abc", &pos, 10);,strtol返回123,pos指向字符串中的字母a。如果字符串开头没有可识别的整数,例如char * strtol("ABCabc", &pos, 10);,则strtol返回0,pos指向字符串开头,可以据此判断这种出错的情况,而这是atoi处理不了的。
3.如果字符串中的整数值超出long int的表示范围(上溢或下溢),则strtol返回它所能表示的最大(或最小)整数,并设置errno为ERANGE,例如strtol("0XDEADbeef~~", NULL, 16)返回0x7fffffff并设置errno为ERANGE
将字符串a, b, c 分别采用10, 2, 16进制转换成数字
------------------------------------------------
#include &stdlib.h&
#include &stdio.h&
int main()
&char a[] = "100";
&char b[] = "100";
&char c[] = "0x11";
&int x, y,
&x = strtol( a, NULL, 10 );
&y = strtol( b, NULL, 2 );
&z = strtol( c, NULL, 16 );
&printf( "x = %d\n", x );
&printf( "y = %d\n", y );
&printf( "z = %d\n", z );
输出:x = 100
& & & y = 4
& & & z = 17
& 举例说明:字符串b中的每个字符在内存中都占有一个字节(1 Byte = 8 bits)的空间,将若干个(3个)字节中的内容转换成二进制的数字(字符串"100"去掉双引号后是一个二进制的数字100),让后将该二进制数字以十进制的形式4打印出来
阅读(...) 评论()用C语言写的十进制数转换为二进制数的程序
用C语言写的十进制数转换为二进制数的程序
要求有调用函数且利用数组~~~~~~
#include&stdio.h&
ShiToEr(int a,int* b){
int i=0; while(1) {
int main(){ int a,b[1000],i;
for(int l=0;l&1000;++l)
printf("请输入十进制的数: ");
scanf("%d",&a);
i=ShiToEr(a,b);
printf("对应的二进制数为: ");
for(int j=i;j&=0;--j) printf("%d" ,b[j]);
printf("\n");
return 0;}
能对其中一些标下注释不?
有些不大看得懂。。。。。。
还有如果要小数和负数咋办啊?
#include&stdio.h&
ShiToEr(int a,int* b){
//用短除法的原理
int i=0; while(1) {
//取余数,把余数保存在数组
//如果a=0,表示除完了 ,就结束
++i; //a!=0,还没除完,那就继续
//i,用来表示数组里到底有几个数,输出时好控制 }
int main(){ int a,b[1000],i;
printf("请输入十进制的数: ");
scanf("%d",&a);
i=ShiToEr(a,b);
printf("对应的二进制数为: ");
for(int j=i;j&=0;--j) printf("%d" ,b[j]);
printf("\n");
return 0;}
那个负数好解决,但是那个小数的话,我还真没考虑过呢...值得思考
的感言:没说咋弄负数和小数啊.....
略懂社热议
到这看这段程序
#include&stdio.h&#include&malloc.h&#define null 0typedef struct node //定义结构体{struct node *}void initiate(slnode **h) //初始化{*h=(slnode *)malloc(sizeof(slnode));(*h)-&next =}void pushls(slnode *h,int x) //实现余数进栈{slnode *p;p=(slnode *)malloc(sizeof(slnode));p-&data =x;p-&next =h-&h-&next =p;}void travel(slnode *h) //遍历输出{slnode *p;p=h-&while(p!=null){printf("%d",p-&data );p=p-&}}void main() //主函数{int r,s,t;slnode *L;initiate(&L);printf("输入一个十进制数:");scanf("%d",&r);do{s=r%2;t=r-s;r=r/2;pushls(L,s);}while(r!=0);printf("所得二进制数为:");travel(L);printf("\n");}
#include &stdio.h&void dto2(int n, char** s){
if(n & 0) {
dto2(n && 1, s);
*(*s)++ = n & 1 ? '1' : '0';
}}int main(){
char s[64], *p =
dto2(10, &p);
printf("%s", s);
负数和小数的话就用指针定位内存进行无差别位操作了#include &stdio.h&void dto2(void* num, int n){
typedef unsigned char *
pbyte p = (pbyte)num + n - 1;
while(p &= (pbyte)num) {
for(i = 7; i &= 0; --i)
putchar(*p & (1 && i) ? '1' : '0');
putchar(' ');
putchar('\n');}#define C(a) dto2(&a, sizeof(a))int main(){
int a = 10;
double b = 123.456;
float c = 3;
char d = 'A';
getchar();
return 0;}
#include"stdio.h"void jinzhi(int n,int j){ if(n==0) else
jinzhi(n/j,j); printf("%d",n%j);}void main(){ int n,j; printf("输入要转换的数,和要转换的进制范围在2-9之间:)";scanf("%d %d",&n,&j); jinzhi(n,j);printf("\n")l;}
递归算法,可以转换任意2-9之间的进制,如果要就100转换为2进制就
输入100空格2就可以了
略懂社热议
等待您来回答
编程领域专家
&SOGOU - 京ICP证050897号十进制转二进制c语言表达_百度百科
十进制转二进制c语言表达
本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来吧!
十进制转二进制c语言表达
#include&stdio.h&
int&main(void)
&&&&int&i=0,n,a[32];
&&&&printf(&请输入一个十进制整数.\n&);
&&&&scanf(&%d&,&n);
&&&&while&(n&0)
&&&&&&&&a[i]=n%2;
&&&&&&&&i=i+1;
&&&&&&&&n=n/2;
&&&&printf(&十进制整数转换为二进制数是:\n&);
&&&&for(i--;i&=0;i--)
&&&&&&&&printf(&%d&,a[i]);
&&&&printf(&\n&);
&&&&return&0;你的位置: >
> 正负数十进制转二进制 位运算 C语言版
文章作者:姜南(Slyar) 文章来源:Slyar Home () 转载请注明,谢谢合作。
今天在论坛上看到一个负十进制数转二进制的问题,于是小研究了一下,顺便学习位运算。。。
我们知道负数的二进制是由其正数的二进制取反(求反码)再加一(求补码)得到的,例如:
十进制数528的二进制码为:0000
将其取反(求反码)后的结果:1111
将反码加一(求补码)后结果:0000
所以,-528的二进制码为0000
小说一下概念,然后看一个位运算符,按位与(&) :0&0=0 , 0&1=0 , 1&0=0 , 1&1=1
我们知道,奇数的二进制最后一位全部为1,而偶数的二进制最后一位全部为0,那么用按位与运算符我们可以很方便地知道一个数是奇数还是偶数,只要让数字 &1 就可以了,因为 奇数&1=1 ,而 偶数&1=0
现在看一段代码,作用是将十进制数转换为二进制数。
#include &stdio.h&
int main()
scanf("%d",&x);
for(i=31;i&=0;i--) printf("%d",x&&i&1);
system("pause");
重点就在 x&&i&1 啦,每次按照能否被二整除来确定0或者1,然后一位一位的移动,这样处理负数也是可以的,很爽~详细解释太麻烦,自己思考吧,嘎嘎~
转载请注明: &
与本文相关的文章

我要回帖

更多关于 十进制转二进制计算器 的文章

 

随机推荐