C語言把浮點數轉換爲二進制數的方法和示例

浮點數據轉換爲二進制的方法是:

1)把浮點數拆分成兩部分,小數點前面的整數和小數點後面的小數。

2)分別把整數和小數部分轉換爲二進制,保存在字符串中。

3)輸出轉換後和二進制字符串。

1、整數部分轉二進制字符串的方法

1)把十進數除以2,記下餘數(餘數保存在字符串中),現用商除以2,再記下餘數,如此循環,直到商爲0。

2)把保存餘數的字符串反過來,就是結果。

例如123轉化成二進制:

123/2=61餘1

61/2=30餘1

30/2=15餘0

15/2=7餘1

7/2=3餘1

3/2=1餘1

1/1=0餘1

結果是1101111,反過來就是1111011。

2、小數部分轉二進制字符串的方法

1)把小數乘以2,假設結果是s,如果s大於1,該位二進制值爲1,如果小於1,該位二進制值爲0;

2)把上一步的結果s去掉整數位,只保留小數位,假設得到結果xs,如果xs等於0,轉換結束,如果xs大於0,重複第1)步。

例如0.2轉換爲二進制:

0.2*2=0.4 0

0.4*2=0.8 0

0.8*2=1.6 1

0.6*2=1.2 1

0.2*2=0.4 0

…… 無限循環

浮點數123.2,轉換爲二進制的結果是1111011.00110011001100110011(小數點後保留20位)。

3、示例程序

/*
 * 程序名:book.c,此程序用於把浮點數轉換爲二進制的字符串。
 * 作者:C語言技術網(www.freecplus.net) 日期:20190525。
*/
#include "stdio.h"
#include <string.h>

// 把浮點數的整數部分轉換爲二進制的字符串。
// dec:待轉換的浮點數的整數部分。
// pbin:用於存放轉換後的字符串的地址。
void dectobin(const long dec,char *pbin)
{
  long ys=0;  // 餘數。
  int s=dec;  // 商。
  int ii=0;   // 位數的計數器。
  char result[65];  // 轉換成二進制後,保存在result中,再反過來存放到pbin中。

  memset(result,0,sizeof(result));

  // 把浮點數的整數部分轉換爲二進制,存放在result中。
  while (s>0)
  {
    ys=s%2;
    s=s/2;
    result[ii]=ys+'0';
    ii++;
  }
  
  // 再把result字符串反過來,存放在pbin中。
  int jj=0;
  for (;ii>0;ii--)
  {
    pbin[jj]=result[ii-1];
    jj++;
  }

  pbin[jj]=0; // 出於安全的考慮,加上0表示字符串結束。
}

// 把浮點數小數部分轉換爲二進制的字符串。
// decp:待轉換的浮點數的小數部分。
// pbin:用於存放轉換後的字符串的地址。
// maxp:指定pbin字符串保留的長度。
void decptobin(const double decp,char *pbin,const int maxp)
{
  double xs=decp;  // 小數部分。
  int qz=0;        // 取整的結果。
  int ii=0;        // 位數的計數器。

  while (xs>0)
  {
    qz=(int)(xs*2);      // 小數部分乘2取整。
    pbin[ii++]=qz+'0';   // 0+'0'='0',1+'0'='1'。
    xs=xs*2;             // 小數部分乘2。
    if (xs>=1) xs=xs-1;  // 如果>=1,取整。
    
    if (ii==maxp) break;
  }

  pbin[ii]=0;  // 出於安全的考慮,加上0表示字符串結束。
}

int main()
{
  double ff=0;
  printf("請輸入一個浮點數:");  
  scanf("%lf",&ff);

  char str1[101],str2[101];
  memset(str1,0,sizeof(str1));

  dectobin((long)ff,str1);  // 把整數部分轉換爲二進制,保存在str1中。
  decptobin(ff-(long)ff,str2,24);  // 把小數部分轉換爲二進制,保存在str2中。

  printf("%f的二進制輸出是:%s.%s\n",ff,str1,str2);
}

運行效果
在這裏插入圖片描述

4、版權聲明

C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。

來源:C語言技術網(www.freecplus.net

作者:碼農有道

如果這篇文章對您有幫助,請點贊支持,或在您的博客中轉發此文,讓更多的人可以看到它,謝謝!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章