程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 十進制浮點數轉換為二進制 C++實現

十進制浮點數轉換為二進制 C++實現

編輯:關於C語言
 

這兩天我跟進制轉換槓上了!前面已經寫了十進制整數轉換為二進制C++實現 和十進制整數轉換為任意進制C++實現 兩篇文章簡單介紹了一下進制轉換的原理,但是之前只是對整數進行轉換。今天介紹的是將十進制小數轉換為二進制小數。由於有效位數的原因,這個浮點數轉換的結果與原本的數值之間還是存在著差異的。


之前我們將十進制整數轉換為二進制是進行除二求余,但是小數部分采用的卻是乘2取整,下面以0.8125為例,詳解過程:
0.8125 * 2 =1.625 整數部分為 1
0.625 * 2 =1.25 整數部分為 1
0.25 * 2 =0.5 整數部分為 0
0.5 * 2 =1 整數部分為 1
將上面每行乘積的整數部分從上往下連接起來就是0.1101,下面請看詳細代碼

#include<iostream>

using namespace std;

void d2b(int var,int *p){ //定義函數

int i=31,j=0, tmp; //定義函數中需要用到的變量 tmp用於交換,其他為下標

while(var>0){//當var大於0時對var求余,並除以2賦給var

p[i]=var%2;//第一個余數存貯於p[31](數組最後一位)

var=var/2;

i--;

}

i++;

//*將獲得值的起始位置遷移至p[0]

for(;i<32;j++){

tmp=p[j];

p[j]=p[i];

p[i]=tmp;

i++;

}

p[j]=-1;//將數值結尾後面設置為-1

}

void fd2b(float fen,int *pf){

int i=0;

for(;fen>0;i++){

fen =fen*2;

if(fen >=1){

pf[i]=1;

fen =fen -1;

}else{

pf[i]=0;

}

}

pf[i]=-1;

}

int main(){

int p[32]; int pf[64]; float fl;

cout<<"請輸入一個浮點數:";

cin>>fl;

int zhengshu=(int)fl;

float fenshu=fl-zhengshu;

cout<<zhengshu<<'+'<<fenshu;

d2b(zhengshu,p);fd2b(fenshu,pf);

cout<<"轉換結果為";

for(int i=0;p[i]>=0;i++)cout<<p[i];

cout<<'.';

for(int i=0;pf[i]>=0;i++)cout<<pf[i];

cout<<endl;

return 0;

}
下面為執行結果:
十進制浮點數轉換為二進制 C++實現.png

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved