二进制转换

发布网友 发布时间:2022-04-24 03:22

我来回答

2个回答

热心网友 时间:2023-10-24 15:34

char s [128]是说定义了一个名叫s的字符型数组,这个数组有128个元素(也就是有128个char型变量所占用的字节)。通常,一个char型变量只占一个8位二进制字节,所以char s [128]是为字符变量s在内存中划分了128个字节,编号为s[0]到s[127]。这些字节可以用s的下标访问,如:s [0]表示第一个,s [1]表示第二个……s [127]表示最后一个!
看我写的这个函数能不能解决你的问题?
# include "stdafx.h"
# include "stdio.h"
# include "string.h"
# include "stdlib.h"
# include "conio.h"
# include "math.h"

void DecDoubletoB(void){

long double n_Dec=0.0,temp=0.0;
char A_Dec[20]="",B_Str[33]="",cx[2]="",i,j,*pt=NULL;//

printf("Please input a Decimal number!\nn_Dec=");
j=20;
for(i=0;i<j;){
if((*cx=getch())==0xD && i) break;
else if(*cx==0x8 && i){
printf("\b%c\b",' ');
if(*(A_Dec+--i)=='.'){
pt=NULL;
j=20;
}
*(A_Dec+i)=NULL;
continue;
}
else if(!pt && i==9 && *cx!='.') continue;//

if(*cx>='0' && *cx<='9' || !pt && *cx=='.'){
strcat(A_Dec,cx);
printf("%c",*cx);
if(*cx=='.'){
pt=A_Dec+i+1;
j=i+10;
}
i++;
}
}

for(i=0;;i++){//
if(*(A_Dec+i)=='.' || *(A_Dec+i)==NULL) break;
n_Dec=10*n_Dec+*(A_Dec+i)-'0';
}
printf("\n\n\t%s(10)------>%s",A_Dec,ltoa((long)n_Dec,B_Str,2));//Output integer

*B_Str=NULL;
if(pt){//
n_Dec=0.0;
for(i=0;;i++){//
if(*(pt+i)==NULL) break;
temp=*(pt+i)-'0';
for(j=-1;j<i;temp/=10.0,j++);
n_Dec+=temp;
}//

for(i=0;i<32;i++){//
*cx='0';
if((n_Dec*=2)>=1.0){
*cx+=(char)(n_Dec);
n_Dec-=1.0;
}//
strcat(B_Str,cx);
if(!n_Dec) break;
}
}

for(i--;i>=0;i--)//To delete '0' after binary fraction
if(*(B_Str+i)=='0') *(B_Str+i)=NULL;
else break;

printf(pt ? ".%s(2)\n\n" : "%s(2)\n\n",B_Str);//Output binary fraction
}

int main(int argc, char* argv[]){

DecDoubletoB();
return 0;
}

热心网友 时间:2023-10-24 15:35

这个程序就是讲10进制转化为2进制的程序,
变量i的类型是int,所以长度是16byte
每一个byte里有8bit,所以是128.
s [128]是128个长的数组,用来放i的2进制的。
函数itoa就是算2进制的函数。追问请问:
那个十进制小数怎么转换成二进制?

热心网友 时间:2023-10-24 15:34

char s [128]是说定义了一个名叫s的字符型数组,这个数组有128个元素(也就是有128个char型变量所占用的字节)。通常,一个char型变量只占一个8位二进制字节,所以char s [128]是为字符变量s在内存中划分了128个字节,编号为s[0]到s[127]。这些字节可以用s的下标访问,如:s [0]表示第一个,s [1]表示第二个……s [127]表示最后一个!
看我写的这个函数能不能解决你的问题?
# include "stdafx.h"
# include "stdio.h"
# include "string.h"
# include "stdlib.h"
# include "conio.h"
# include "math.h"

void DecDoubletoB(void){

long double n_Dec=0.0,temp=0.0;
char A_Dec[20]="",B_Str[33]="",cx[2]="",i,j,*pt=NULL;//

printf("Please input a Decimal number!\nn_Dec=");
j=20;
for(i=0;i<j;){
if((*cx=getch())==0xD && i) break;
else if(*cx==0x8 && i){
printf("\b%c\b",' ');
if(*(A_Dec+--i)=='.'){
pt=NULL;
j=20;
}
*(A_Dec+i)=NULL;
continue;
}
else if(!pt && i==9 && *cx!='.') continue;//

if(*cx>='0' && *cx<='9' || !pt && *cx=='.'){
strcat(A_Dec,cx);
printf("%c",*cx);
if(*cx=='.'){
pt=A_Dec+i+1;
j=i+10;
}
i++;
}
}

for(i=0;;i++){//
if(*(A_Dec+i)=='.' || *(A_Dec+i)==NULL) break;
n_Dec=10*n_Dec+*(A_Dec+i)-'0';
}
printf("\n\n\t%s(10)------>%s",A_Dec,ltoa((long)n_Dec,B_Str,2));//Output integer

*B_Str=NULL;
if(pt){//
n_Dec=0.0;
for(i=0;;i++){//
if(*(pt+i)==NULL) break;
temp=*(pt+i)-'0';
for(j=-1;j<i;temp/=10.0,j++);
n_Dec+=temp;
}//

for(i=0;i<32;i++){//
*cx='0';
if((n_Dec*=2)>=1.0){
*cx+=(char)(n_Dec);
n_Dec-=1.0;
}//
strcat(B_Str,cx);
if(!n_Dec) break;
}
}

for(i--;i>=0;i--)//To delete '0' after binary fraction
if(*(B_Str+i)=='0') *(B_Str+i)=NULL;
else break;

printf(pt ? ".%s(2)\n\n" : "%s(2)\n\n",B_Str);//Output binary fraction
}

int main(int argc, char* argv[]){

DecDoubletoB();
return 0;
}

热心网友 时间:2023-10-24 15:35

这个程序就是讲10进制转化为2进制的程序,
变量i的类型是int,所以长度是16byte
每一个byte里有8bit,所以是128.
s [128]是128个长的数组,用来放i的2进制的。
函数itoa就是算2进制的函数。追问请问:
那个十进制小数怎么转换成二进制?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com