首页 > 编程知识 正文

带小数点的十进制转换成二进制,c读取二进制文件

时间:2023-05-06 16:37:52 阅读:174011 作者:165

将十六进制数转换为二进制数,通过补数求出。 而且,将二进制数转换为十进制的FBH的最后h表示将十六进制FB转换为二进制数。 1111 1011反过来加1,1000 0101就会变成-5。 其中第一位可以不倒过来。 把负数的带小数的二进制数转换成十进制数看是因为理论上没有代码。 今天我做自己的发表,欢迎您的指正。 (

#include stdio.h

#include string.h

#include math.h

voidfun2_10(charstr[],int j,int len ) /从带小数的二进制转换为十进制

{

int k=j 1; //k指向小数部分的第一位

int cetz=0,cetx=-1;

双精度=0;

双精度=0;

if(str[0]=='1' )//符号位==1

{

//倒补数

for(intI=j-1; i 0; I----)

{

str[i] -=1;

if(str[I]=='0' )

黑;

else

str[i]='1';

}

//反码

for(intI=j-1; i 0; I----)

str[i]=='0'? (str[i]='1' ) : ) str[i]='1' );

//2圈10式

for(intI=j-1; i 0; I----//整数部分的逆加法

{

sumz=(str[I]-'0' ) pow ) 2,cetz );

cetz;

}

Sumz=0 - Sumz; //减去

}

else //符号位==0

for (; j 0; j----//整数部分的逆加法

{

sumz=(str[j-1]-'0' ) pow ) 2,cetz );

cetz;

}

//

for (; k len; k//小数部分正向累积

{

sumx=(str[k]-'0' ) pow ) 2,cetx );

CETX----;

}

printf(%lf(n ),Sumz Sumx ); //整数部分加小数部分

}

int main () )

{

int j,k;

char str[100];

strcpy(str,' 001000010.1000010 ); //66.515625

//strcpy(str,' 101010111.1001010 ' ); //-168.421875

intlen=strlen(str; //统计字符串的长度

for(j=0; j len; j//统计整数部分的长度

{

if(str[j]=='.' )

黑;

}

fun2_10(str,j,len );

返回0;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。