摘要:目錄數(shù)據(jù)在計算機(jī)的存儲方式補(bǔ)碼,反碼,原碼數(shù)據(jù)在計算機(jī)的存儲方式補(bǔ)碼,反碼,原碼整形在內(nèi)存中的存儲整形在內(nèi)存中的存儲整形類型整形類型大端字節(jié)序和小端字節(jié)序大端字節(jié)序和小端字節(jié)序浮點數(shù)在內(nèi)存的儲存浮點數(shù)在內(nèi)
目錄
數(shù)據(jù)在計算機(jī)的存儲方式(補(bǔ)碼,反碼,原碼)
在32位機(jī)器上,計算機(jī)儲存數(shù)據(jù)是用32個比特位來儲存數(shù)據(jù),也就是32個0,其中第一位數(shù)為符號位,大多數(shù)情況用來表示整數(shù)是正的還是負(fù)的,我們先從原碼說起,1和-1的原碼分別為:
正數(shù)的反碼不變,負(fù)數(shù)的反碼在其原碼的基礎(chǔ)上符號位不變,其他位按位取反(0變成1,1變成0),即:
?正數(shù)的補(bǔ)碼還是不變,負(fù)數(shù)的補(bǔ)碼在其反碼的基礎(chǔ)上加1:
?所以我們可以總結(jié):正數(shù)的原碼,反碼和補(bǔ)碼都相同,而負(fù)數(shù)的原碼,反碼和補(bǔ)碼在轉(zhuǎn)換時才會不同,計算機(jī)在儲存整形時用的都是補(bǔ)碼。
我們知道C語言的整形類型有
我們知道char是字符類型,但是char類型儲存字符的方式也是儲存數(shù)字,然后在通過ascii碼表轉(zhuǎn)化為對應(yīng)的字符,所以在這里我也將char當(dāng)作是整形的一類了。
計算機(jī)會分配給不同類型不同的字節(jié)大小,也就是可以儲存數(shù)字的大?。?/p>
?對于不同整形無符號的問題,我拿char舉個栗子
char類型的最大值和最小值在計算機(jī)的存儲:
10000000~011111111? 10000000為-128(這是計算機(jī)規(guī)定的),111111111為-127,011111111為127,
所以大小范圍是-128到127
而無符號char類型,就是將最后一位符號位變成計算大小的位,即:
00000000~111111111=00000000~01111111+2^8,也就是0到255
在這里我們引入一下內(nèi)存單元的概念,內(nèi)存單元代表的是一個字節(jié)空間,即8個比特位,計算機(jī)會給這個內(nèi)存空間分配一個地址(其實就是指針)。
當(dāng)我們創(chuàng)建一個int變量,并且給他賦一個16進(jìn)制的值 0x11223344,那么計算機(jī)會給他連續(xù)開辟4個字節(jié)大小的空間,他會有4個內(nèi)存單元,接下來11將會被放在第一個內(nèi)存單元,22放在第二個內(nèi)存單元,下面也是一樣,那么計算機(jī)會怎么給這些內(nèi)存單元分配地址呢?于是就產(chǎn)生了大端字節(jié)序和小端字節(jié)序。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?~兩位16進(jìn)制的范圍大小等于8個比特位的范圍大小?
大端字節(jié)序存儲:高字節(jié)序的內(nèi)容放在低地址,低字節(jié)序的內(nèi)容放在高地址
小端字節(jié)序存儲:高字節(jié)序的內(nèi)容放在高地址,低字節(jié)序的內(nèi)容放在低地址? ? ? ?
?其中:高字節(jié)序代表高位數(shù),即11,低字節(jié)序代表低位數(shù),
我們可以測試下自己的編譯器是大端的還是小端的,
#includeint main(){ int a = 0x11223344; char* p = (char*)&a; printf("%0x", *p); return 0;}
如果運行的結(jié)果為44,則為小端,11為大端
根據(jù)國際標(biāo)準(zhǔn),任意一個二進(jìn)制浮點數(shù)都可以表示成:
(-1)^S*M*2^E??
(-1)^s表示符號位,-1的s次冪要么是正數(shù),要么是負(fù)數(shù)PM表示有效數(shù)字,M大于等于1,小于2;
2^E表示指數(shù)位。? ? ? ? ? ? ? ? ? ? ? ? ? ? -----總的來說就是二進(jìn)制的科學(xué)計數(shù)法
?
浮點數(shù)在內(nèi)存的存儲其實就是S,M和E的存儲
單精度浮點型float:最高的一位是符號位s,接著的8位是指數(shù)E,剩下的23位為有效數(shù)字M
?其中,E的大小0~255
雙精度浮點型double:最高的一位是符號位s,接著的11位是指數(shù)E,剩下的52位為有效數(shù)字M
?其中E的大小0~2047
———————————————————————————————————————————
M的存儲:
因為1<=M<2,所以M肯定為1.xxxxxxx,所以標(biāo)準(zhǔn)規(guī)定在計算機(jī)存儲M的時候,不儲存第一位數(shù)字1,當(dāng)讀取的時候才加上1,這樣做的目的是節(jié)省一位有效數(shù)字,使計算機(jī)保存更多其他有效數(shù)字。
———————————————————————————————————————————
E的存儲:
首先,E在計算機(jī)的存儲肯定是一個無符號整形,這就意味著,當(dāng)E為11位,那它的大小范圍是0~2047,當(dāng)E是8位時,它的大小范圍為0~255
但是我們知道,在科學(xué)計數(shù)法表數(shù)的示時,它的指數(shù)位是可以取負(fù),所以科學(xué)家為了使得E表示負(fù)數(shù),在將E存儲前加上一個中間數(shù)字,8位的E的中間數(shù)位127,11位的E為1023,這樣在讀取的時候給E減去這個中間數(shù),在計算的時候E就能當(dāng)作負(fù)數(shù)帶來計算了。、
E的特殊情況
當(dāng)E全位0的時候,那么E的真實值位1-127(或者1-1023),接下來在計算的時候M不會再加1,因為E為全0的時候算出來的數(shù)是無限接近于0的數(shù),所以干脆就不給M加1,便于表示+0和-0;
當(dāng)E全為1的時候,如果有效數(shù)字全為0,表示+無窮或者-無窮
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/125631.html
摘要:語言基礎(chǔ)之操作符詳解操作符的分類算術(shù)操作符移位操作符位操作符邏輯操作符逗號表達(dá)式表達(dá)式求值隱式類型轉(zhuǎn)換算術(shù)轉(zhuǎn)換操作符的屬性今天就帶各位大佬來了解一波語言的操作符。 ...
摘要:還不清楚原碼反碼補(bǔ)碼的可以到語言從入門到入土操作符篇中的移位操作符處學(xué)習(xí)一下。比如原碼反碼補(bǔ)碼原碼顯示值補(bǔ)碼數(shù)據(jù)存放內(nèi)存中其實存放的是補(bǔ)碼補(bǔ)碼的表示與存儲在計算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來表示和存儲。 ...
摘要:操作符的兩個操作數(shù)必須為整數(shù)。函數(shù)調(diào)用用作為函數(shù)調(diào)用操作符。訪問一個結(jié)構(gòu)的成員結(jié)構(gòu)體成員名結(jié)構(gòu)體指針成員名還是熟悉的栗子在之前的博客請回答語言初識語言下入門的結(jié)構(gòu)體出現(xiàn)過的栗子名字圖鑒編號身高重量屬性類型 ...
目錄 ? ?一、數(shù)據(jù)類型介紹 二、類型的意義 三、類型的基本歸類 整型家族 浮點數(shù)家族 構(gòu)造類型(自定義類型) 指針類型 空類型 四、整形在內(nèi)存中的存儲 原碼、反碼、補(bǔ)碼 大小端字節(jié)序 為什么有大端和小端? 一道經(jīng)典筆試題 ?一、數(shù)據(jù)類型介紹 數(shù)據(jù)從大的方向分為兩類: 內(nèi)置類型自定義類型內(nèi)置類型我們前面已經(jīng)學(xué)習(xí)過,如下: char? ? ? ? ? ? //字符數(shù)據(jù)類型 short? ? ? ...
閱讀 3980·2023-01-11 11:02
閱讀 4480·2023-01-11 11:02
閱讀 3358·2023-01-11 11:02
閱讀 5379·2023-01-11 11:02
閱讀 4942·2023-01-11 11:02
閱讀 5871·2023-01-11 11:02
閱讀 5560·2023-01-11 11:02
閱讀 4378·2023-01-11 11:02