日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python float字节数_float型的数在内存中的表示 附:python3解析函数 | 学步园

發布時間:2024/9/19 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python float字节数_float型的数在内存中的表示 附:python3解析函数 | 学步园 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

32為操作系統中float型的數是4個字節(32位),小數0.002122二進制格式如下:

00111011000010110001000101000001

左起第1位:是整個數的符號位,0正 1

負左起第2-9位:是指數的倒數

左起10-32位:是科學計數法系數的小數部分 (二進制表示)

下面是我寫的一個解析float內存結構的函數,python3寫的

##文件名:decimal.py

#輸入32個01組成的二進制字符串

def decimals( dat):

lendat = len(dat)

if lendat != 32:

print('字符串長度不是32')

return 0

for c in dat:

if (c != '0') and (c != '1'):

print('輸入的字符串含有不合法的字符')

return 0

#dattemp = dat[24:32]+dat[16:24]+dat[8:16]+dat[0:8] #寫到硬盤上的浮點數要調整順序 順序顛倒

dattemp = dat

print('dattemp:',dattemp)

sigbit = dattemp[0]???????? #符號位

expsigbit = dattemp[1]????? #指數符號位

exponent = dattemp[2:9]???? #指數

mantissa = dattemp[9:32]??? #尾數

print(sigbit,expsigbit,exponent,mantissa)

print('總長度:',(len(sigbit)+len(expsigbit)+len(exponent)+len(mantissa)))

iexp = 0??????????????? #指數的十進制

print('符號位sigbit:',sigbit)

print('指數符號位expsigbit:',expsigbit)

print('指數exponent:',exponent)

print('尾數mantissa:',mantissa)

ipos = 0??????????????? #游標 標記'1'的位置

#[expsigbit+dattemp] 就是原來原小數(二進制數)轉換成科學計數法后 (樣子像這樣:1.1001101*2^n) 那個2上面的指數n

temp = exponent[::-1]

for c in temp:

if (c == '1') ^ (expsigbit == '0'): #右移時算'0'的個數 左移時算'1'的個數 不移不算

iexp += 2**ipos

#print('當iops=',ipos,'時,iexp=',iexp,' c:',c,'expsigbit:',expsigbit)

ipos += 1

else:

if expsigbit == '1':#如果是左移 位數值要加1

iexp += 1

iexp *= -1

#print("得到標志:",iexp)

iexp *= -1 #這里乘以-1是為了下面的好算,這就是指數了

#print("指數為",iexp)

decimalpart = 0.0?????? #科學計數法的小數部分

ipos = 0??????????????? #游標 標記'1'的位置

for c in mantissa:

ipos += 1

if c=='1':

decimalpart += 2**-ipos

#print('decimalpart=',decimalpart,'/t2^-',ipos,'=',2**-ipos)

intpart = 1???????????? #整數部分 因為2進制的數科學計數法 整數部分只能是1

#print('decimalpart:',decimalpart)

if sigbit == '0':

flt = (intpart + decimalpart)*2**(iexp)

else:

flt = (-1)*(intpart + decimalpart)*2**(iexp)

return flt

################################

#文件名:main.py

#調用方法如下:

from decimal import *

s='00111011000010110001000101000001'

print('原始字符串為:',s)

print('解析結果為:',decimals(s))

解析結果為: 0.00212200009264

小數的結果不完全等于原來的小數 因為浮點數有誤差 (尾數段不夠長,double的長一些所以更精確)

總結

以上是生活随笔為你收集整理的python float字节数_float型的数在内存中的表示 附:python3解析函数 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。