目錄
前言
一.C語言的基本數(shù)據(jù)類型介紹
? 1.1整形家族
?編輯
1.2浮點型家族
? 1.3指針類型
? 1.4構(gòu)造類型
? 1.5空類型void?
二.整形在內(nèi)存中的存儲
2.1原碼,反碼,補碼
? 2.2大小端的介紹
三. 浮點數(shù)的存儲
3.1舉一個例子
3.2浮點數(shù)存儲規(guī)則
3.3解釋例題
四.結(jié)語:
新年的第一篇博客,記錄一下新一年的學習8。
大家都知道數(shù)據(jù)在計算機中是用二進制進行存儲的,一個字節(jié)由8位二進制數(shù)組成。那數(shù)據(jù)在C語言存儲的細節(jié)是怎么樣的呢?這篇文章就帶大家討論這個問題。
一.C語言的基本數(shù)據(jù)類型介紹 ? ? ? ? 1.1整形家族在windows64位系統(tǒng)中,long long 占8個字節(jié),long占4個字節(jié),int占4個字節(jié),short占2個字節(jié),char占1個字節(jié)。
為什么要把char歸入整形家族呢?因為字符數(shù)據(jù)在c語言中本質(zhì)儲存的ASCII碼,而ASCII碼是整數(shù),所以存儲方式與整數(shù)一致。
1.2浮點型家族在windows64位系統(tǒng)中,float占4個字節(jié),double占8個字節(jié)。
? 1.3指針類型指針類型(當然指針類型不只這些,這里沒有列舉完)?,在64位系統(tǒng)下占8個字節(jié),32位系統(tǒng)下占4個字節(jié)。
? 1.4構(gòu)造類型這些類型的存儲要根據(jù)內(nèi)部的數(shù)據(jù)類型計算,這里就不做詳細描述
? 1.5空類型void?void表示無類型(空類型)。
通常應用于函數(shù)的返回類型、函數(shù)的參數(shù)、指針類型。什么是原碼呢?
原碼就是整數(shù)直接轉(zhuǎn)換成二進制后形成的二進制序列。如下圖所示。
因為a是int類型,int類型由4個字節(jié)組成,所以它轉(zhuǎn)換成二進制后的源碼應該由32位二進制組成。
在C語言的規(guī)定中,正整數(shù)的原碼、反碼、補碼是相同的。
PS:它是怎么知道正負的呢?在c語言中,數(shù)據(jù)的原碼首位字符代表正負(0為正,-1為負)。
看完了正數(shù)的原反補,現(xiàn)在我們來看負數(shù)。
負數(shù)的原碼與整數(shù)一樣,都是由數(shù)字轉(zhuǎn)化為二進制得到,與正數(shù)不同的是,它的第一位是1,也就是符號位為1。
它的反碼怎么得來呢?
負數(shù)的反碼由原碼轉(zhuǎn)化而來,規(guī)則是:符號位不變,其他位依次按位取反得到。補碼則是反碼加一得到。
但是數(shù)據(jù)中為什么要存在原碼、反碼、補碼呢?
在計算機系統(tǒng)中,數(shù)值一律用補碼來表示和存儲。原因在于,使用補碼,可以將符號位和數(shù)值域統(tǒng) 一處理; 同時,加法和減法也可以統(tǒng)一處理( CPU 只有加法器 )此外,補碼與原碼相互轉(zhuǎn)換,其運算過程 是相同的,不需要額外的硬件電路。 原因如下圖所示:我們也可以驗證一下,我這里查看的是VS2022中的內(nèi)存存儲。
但是我們看到內(nèi)存存儲的順序又存在一些問題,它好像是倒著存儲的。
這又是什么原因呢??
? 2.2大小端的介紹什么是大小端:
大端(存儲)模式,是指數(shù)據(jù)的低位保存在內(nèi)存的高地址中,而數(shù)據(jù)的高位,保存在內(nèi)存的低地址 中; 小端(存儲)模式,是指數(shù)據(jù)的低位保存在內(nèi)存的低地址中,而數(shù)據(jù)的高位 , ,保存在內(nèi)存的高地 址中。PS:0x就是十六進制的意思。
這里我們可以看到數(shù)據(jù)的存儲是倒著存的。
這里的11是低位數(shù)據(jù)存在低地址處,44是高位數(shù)據(jù)存在高地址處。
便于記憶可以簡單的理解為,小端是倒著存,大端是正著存。
三. 浮點數(shù)的存儲 3.1舉一個例子為什么會出現(xiàn)這樣的情況呢?
3.2浮點數(shù)存儲規(guī)則 根據(jù)國際標準 IEEE (電氣和電子工程協(xié)會) 754 ,任意一個二進制浮點數(shù) V 可以表示成下面的形式: (-1)^S * M * 2^E PS: (-1)^S 表示符號位,當 S=0 , V 為正數(shù);當 S=1 , V 為負數(shù)。 M 表示有效數(shù)字,大于等于 1 ,小于 2 。 2^E 表示指數(shù)位。 這個是什么意思呢? 這里舉個例子比如5.5可以表示為:(-1)^0*1.011*2^2 這個算式怎么的出來的呢? 首先把5.5轉(zhuǎn)化為二進制101.1 再轉(zhuǎn)化成科學計數(shù)法表示也就是1.011*2^2IEEE 754對有效數(shù)字M和指數(shù)E,還有一些特別規(guī)定?
因為在浮點數(shù)中M永遠都是大于等于1小于2的,所以E最前面的1沒有必要存儲,這樣可以多一位精度。
至于指數(shù) E ,情況就比較復雜。 首先, E 為一個無符號整數(shù)( unsigned int ) 這意味著,如果 E 為 8 位,它的取值范圍為 0~255 ;如果 E 為 11 位,它的取值范圍為 0~2047 。但是,我們 知道,科學計數(shù)法中的E 是可以出 現(xiàn)負數(shù)的,所以 IEEE 754 規(guī)定,存入內(nèi)存時 E 的真實值必須再加上一個中間數(shù),對于 8 位的 E ,這個中間數(shù) 127;對于 11 位的 E ,這個中間 數(shù)是 1023 。比如, 2^10 的 E 是 10 ,所以保存成 32 位浮點數(shù)時,必須保存成 10+127=137 ,即 10001001 。 也就說在存儲E時要加上127再進行存儲。 其次就是E如果為全1或者全0如果E為全一為無窮大(正無窮與負無窮),如果E為全0代表無窮小(無限接近于0)
如果E中有1也有0,那就正常計算即可。
3.3解釋例題數(shù)據(jù)的存儲就講完了,如果有哪里講的不嚴謹,歡迎大家來討論。
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
文章名稱:數(shù)據(jù)內(nèi)存在C語言中的存儲-創(chuàng)新互聯(lián)
瀏覽路徑:http://newbst.com/article2/hhgic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、做網(wǎng)站、品牌網(wǎng)站設(shè)計、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容