得從整形在記憶體中的儲存說起
計算機中的有符號數有三種表示方法,即原碼、反碼和補碼。
三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位三種表示方法各不相同。
原碼直接將二進位制按照正負數的形式翻譯成二進位制就可以。
反碼將原碼的符號位不變,其他位依次按位取反就可以得到了。
補碼反碼+1就得到補碼。
正數的原、反、補碼都相同。
對於整形來說:資料存放記憶體中其實存放的是補碼。
大端:
小端:
為什麼會有大小端模式之分呢?
這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組8bit。但是在c語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對於位數大於8位的處理器,例如16位或者32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如果將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。又回到了unsigned和signed區別的問題
既然資料在記憶體上是以補碼的形式進行儲存
那麼例如char型別的資料,有8位,最高位為符號位
有無符號會導致範圍不同:
對於32位的浮點數,最高的1位是符號位s,接著的8位是指數e,剩下的23位為有效數字m.
對於64位的浮點數,最高的1位是符號位s,接著的11位是指數e,剩下的52位為有效數字m。
怎麼儲存呢,用12.5舉例:
C語言 資料在記憶體中的儲存
字元型資料 1.字元與字元 把字元的相對應的ascii碼 整數,對映關係見ascii碼表 放到儲存碼單元中,而這些ascii 值在計算機中同樣以二進位制補碼的形式存放的。2.字元變數 字元型資料的儲存空間和值的範圍 32位操作平台 型別位元組數 取值範圍 signed char 有符號字元數 1 2...
資料在記憶體中的儲存c語言
基本內建型別 char 字元資料型別 short 短整型 int 整形 long 長整型 long long 更長的整形 float 單精度浮點數 double 雙精度浮點數使用這個型別開闢的記憶體空間大小 大小決定了適用範圍 如何看待記憶體空間的視角。在32位平台下,任何指標型別都只佔4個位元組。...
C語言 資料在記憶體中的儲存
char 字元資料型別 1個位元組 short 短整型 2個位元組 int 整型 4個位元組 long 長整型 4個位元組 long long 更長的整型 8個位元組 float 單精度浮點型 4個位元組 double 雙精度浮點型 8個位元組1,使用這個型別開闢記憶體空間的大小 2,如何看待記憶體...