将十六进制数转换为二进制数,通过补数求出。 而且,将二进制数转换为十进制的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;
}