国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

算法競賽入門經典------浮點數整數在內存中的存儲方式

2019-11-08 02:46:30
字體:
來源:轉載
供稿:網友

算法競賽入門經典---浮點數整數在內存中的存儲方式

參考文章:http://www.cnblogs.com/zxtp/p/4938742.html

1、數據的存儲方式:大端模式和小端模式

大端模式:低地址位存儲值的高位,高地址位存儲值的低位 ,數據填寫時,不要考慮對應關系,只需要把內存地址從左到右按照由低到高的順序寫出,把值按照通常的高位到低位的順序寫出,兩者對照,一個字節一個字節的填充進去。

小端模式:低地址存儲值的低位,高地址存儲值的高位 ,低位值小放在內存地址小的地方,高位值放在內存地址大的地方。

2、浮點數在內存中的存儲方式

(1)程序1

#include<stdio.h>int main(){	PRintf("%.1f/n", 8/5);	return 0;}

運行結果為

(2)程序2

#include<stdio.h>int main(){	printf("%f/n",5);	return 0;}

運行結果為

(2)程序2

#include<stdio.h>int main(){	int a=5;	float b=133.5f;	return 0;}

解釋:

數據在內存中是以二進制的形式存儲的。浮點的存儲方式與整數區別就是:在二進制科學表示法中,S=M*2^N ,浮點的存儲方式是采用:符號位+階碼(N)+尾數(M)的形式。符號位:在計算機內存中,通常都是以一位表示正數(用0表示)或者負數(用1表示)階碼:在機器中表示一個浮點數時需要給出指數,這個指數用整數形式表示,這個整數叫做階碼,階碼指明了小數點在數據中的位置。它與科學計數法中的冪是一個道理。尾數:指小數點后面的數對于float型數據,其二進制有32位,其中符號位1位,階碼8位,尾數23位。例子:將133.5f化為二進制數:(1)首先將整數部分化為二進制數為:        1000 0101(2)然后將小數部分化為二進制為0.1。則133.5的二進制數為        1000 0101.1而在計算機中是怎么樣存儲這個數的呢?首先將這個二進制數用“科學計數法”的形式表示出來就是:        1.0000 1011 * 2^7這里階碼采用移碼表示,對于float型數據其規定偏置量為127,階碼位數為8位(對于雙精度來說,其規定的偏置量為1023。階碼位數為11位。),也就是說這里的階碼應該為127+7 = 134。將其化為二進制數為:           1000 0110由于規定小數點前面都為1,因此在計算機中,將不會存儲小數點前面的1。這里的尾數就為00001011。其后全部補0,將其補充到23位。這里是正數,所以符號位為0。在存儲時,符號位在最前面,其次是階碼,最后放尾數。因此數字在內存中存儲為:       0100 0011 0000 0101 1000 0000 0000 0000其十六進制表示為:        0x43058000則在內存中存放方式為:低地址-------->高地址00 80 05 43

測試代碼:

#include <stdio.h>int main(){    float num = 133.5f;    int *p = (int *)&num;    printf("0x%x/n", *p);    return 0;}

運行結果:

3、整數在內存中的儲存形式

整數在內存中是以補碼的形式存放

(1)求正數補碼

原碼:最高位為符號位(0為正,1為負)。

反碼:一個正數,它的反碼和原碼相同;一個負數,符號位為1,其他各位與原碼相反。

正數補碼:正數的原碼、反碼和補碼都相同。

十進制的整數5,其二進制數為:0000 0000 0000 0000 0000 0000 0000 0101,其補碼為0000 0000 0000 0000 0000 0000 0000 0101

(2)求負數補碼

負數轉化為二進制:求負整數絕對值的二進制數,然后對其求反,求反后再加1得到負整數的二進制。

求十進制數-201的二進制:

201(十進制)---->:0000 0000 0000 0000 0000 0000 1100 1001----->(求反)1111 1111 1111 1111 1111 1111 0011 0110------>(加1)1111 1111 1111 1111 1111 1111 0011 0111

-201(十進制)---->1111 1111 1111 1111 1111 1111 0011 0111(二進制)

負數的反碼:其絕對值的所有位取反

負數的補碼:它的反碼加1

例子:求十進制的整數-5的補碼

5的原碼:0000 0000 0000 0000 0000 0000 0000 0101

反碼:1111 1111 1111 1111 1111 1111 1111 1010

加1得到補碼:1111 1111 1111 1111 1111 1111 1111 1011

-5的補碼為:1111 1111 1111 1111 1111 1111 1111 1011

補碼的十六進制為:FFFF FFFB


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 句容市| 宁波市| 孟连| 淮滨县| 梓潼县| 淄博市| 札达县| 梧州市| 关岭| 株洲县| 公主岭市| 晋中市| 新宁县| 竹溪县| 白朗县| 塔河县| 隆林| 保靖县| 蒙阴县| 鄂托克前旗| 兰考县| 余庆县| 桐梓县| 团风县| 阿勒泰市| 松桃| 华宁县| 南通市| 尚义县| 娄底市| 比如县| 墨竹工卡县| 鹤岗市| 黄骅市| 子洲县| 长丰县| 江达县| 镇沅| 合肥市| 兰西县| 星座|