中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深度剖析數據在內存中的存儲2——浮點數數在內存中的存儲

發布時間:2020-06-25 22:24:21 來源:網絡 閱讀:204 作者:flag不會倒 欄目:編程語言

根據國際標準IEEE:任意一個二進制浮點數V可以表示為下面形式:
(-1)^SM2^E:
(-1)^S表示符號位,當S為0,V為正數;當S為1,V為負數。由其物理結構決定了,浮點數為有符號數。
M為有效數字,大于等于1,小于2。
2^E表示指數位。
eg:5=>0101=>(-1)^01.012^2. S=0,M=1.01,E=2
規定:對于32位的浮點數(單精度浮點數存儲),最高1位是符號位(S),接著的8位為指數位(E),剩下的23位是有效數字位(M),不滿23位后面補0。
對于64位的浮點數(雙精度浮點數存儲),最高1位是符號位(S),接著的11位為指數位(E),剩下的52位是有效數字位(M)。
對于有效數字M和指數E會有一些特殊規定:
1、因為1<=M<2,所以小數點前必定是1,所以可以省略1和小數點,這樣一來,對于單精度浮點數存儲方式,23位有效數位存的都是小數部份數。讀取時,小數點和1都會被自動加上。等于可以保留24位有效數字。雙精度同理。
2、對于指數E來說,首先說明他是一個無符號整數,對于單精度浮點數存儲方式,E共占8位,則E的取值范圍為0~255。但是科學記數法中,指數是可以為負數的,所以規定,存入內存時,E的真實值必須加上一個中間數,對于8位的E,這個中間數為(255/2=)127(實際表達范圍-127~128),對于11位的E,這個中間數為1023(實際表達范圍-1023~1024)。取數時,再減去127/1023即為實際值。(移碼)
eg. 由上面可知,5的指數為2,對于單精度浮點數存儲方式,實際在內存中存儲的數為127+2=129=>1000 0001。
注意:因為當E為全零時,實際上指數為-127,表示一個接近零很小的數,因此浮點數不能與零比較,用精度來代替。當E為全一時,表示的±無窮大。
綜述:整數與浮點數的存儲方式完全不同,整數存取為原反補碼,浮點數為S、E、M
練習代碼:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

int main()
{
    int n = 9;                        //0000 0000 0000 0000 0000 0000 0000 1001
    float pFloat = (float)n;          //將9取出,轉為浮點型,再存給pFloat
    float *pfloat = (float *)&n;      //將n的地址轉為浮點數地址(即看待n的方式變為浮點數)。
    printf("n=%d\n", n);
    printf("pFloat=%f\n", pFloat);
    printf("*float=%f\n", *pfloat);   //解引用后以浮點數形式看待空間里的值  0 00000000 00000000000000000001001   S=0,E=0,(-127)
    *pfloat = 9.0;                    //1001 實際n空間中存的值0 00000011 00100000000000000001001 
    printf("n=%d\n", n);              //轉換為整數為 1091567616
    printf("*float=%f\n", *pfloat);   // 9.000000
    system("pause");
    return 0;
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

焦作市| 鸡西市| 福鼎市| 家居| 富阳市| 平舆县| 辽阳市| 行唐县| 临湘市| 集贤县| 清镇市| 综艺| 得荣县| 大港区| 马鞍山市| 保山市| 肃南| 六盘水市| 无极县| 吴江市| 漯河市| 社旗县| 雷州市| 三亚市| 澎湖县| 桃源县| 临颍县| 宣恩县| 胶南市| 海盐县| 滦南县| 合作市| 栾川县| 锡林郭勒盟| 牟定县| 东山县| 榆社县| 正阳县| 临潭县| 崇明县| 新化县|