摘要:文章目錄一數(shù)據(jù)類型二整型在內(nèi)存中的存儲原碼反碼補碼大小端三例題練習(xí)一數(shù)據(jù)類型在語言中有整型浮點型構(gòu)造類型指針類型等。正數(shù)的原反補碼都相同對于整形來說數(shù)據(jù)在內(nèi)存中存放的都是補碼。
在c語言中有整型、浮點型、構(gòu)造類型、指針類型等。
而類型的意義在于:
知道了一個變量的類型,就知道可以開辟的空間的大小。
那例如int
型具體是如何在內(nèi)存中進行存儲的呢?
需要了解下面的概念:
計算機中的有符號數(shù)有三種表示方法,即原碼、反碼和補碼。
三種表示方法均有符號位和數(shù)值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數(shù)值位
三種表示方法各不相同。
原碼
直接將二進制按照正負數(shù)的形式翻譯成二進制就可以。
反碼
將原碼的符號位不變,其他位依次按位取反就可以得到了。
補碼
反碼+1就得到補碼。
正數(shù)的原、反、補碼都相同
對于整形來說:數(shù)據(jù)在內(nèi)存中存放的都是補碼。
原因在于,使用補碼,可以將符號位和數(shù)值域統(tǒng)一處理;同時,加法和減法也可以統(tǒng)一處理。此外,補碼與原碼相互轉(zhuǎn)換,其運算過程是相同的,不需要額外的硬件電路。
看看在內(nèi)存中的存儲:
按照推理,a的補碼應(yīng)該是0000 0014
,b的補碼應(yīng)該是ffff fff6
而在內(nèi)存中所存儲的形式有點不一樣,這可能就得了解大小端的概念了
大端(存儲)模式,是指數(shù)據(jù)的低位保存在內(nèi)存的高地址中,而數(shù)據(jù)的高位,保存在內(nèi)存的低地址中;
小端(存儲)模式,是指數(shù)據(jù)的低位保存在內(nèi)存的低地址中,而數(shù)據(jù)的高位,,保存在內(nèi)存的高地址中。
從圖中可以看出這臺電腦是小端存儲的,因為它數(shù)值的低權(quán)值位存儲在低地址處。
//輸出什么?#include int main(){ char a= -1; signed char b=-1; unsigned char c=-1; printf("a=%d,b=%d,c=%d/n",a,b,c); return 0; }
結(jié)果:
解析:首先
-1
是整型常量,在32位下的補碼是1111 1111 1111 1111 1111 1111 1111 1111
,在存入char
型變量時發(fā)生截斷,所以在內(nèi)存中存入a
b
c
的數(shù)據(jù)都是1111 1111
,是一樣的,這是因為數(shù)據(jù)的存入和目標(biāo)變量沒有關(guān)系,目標(biāo)變量只提供存儲空間。
printf
也是函數(shù),傳參就要發(fā)生值拷貝,就需要用到CPU,也同樣就會發(fā)生隱式轉(zhuǎn)換。
a
和b
都是有符號字符型,發(fā)生整型提升時補上對應(yīng)的符號位,即1111 1111 1111 1111 1111 1111 1111 1111
,還是-1的補碼,按照%d
的有符號整數(shù)進行打印時,就是-1。
c
變量是無符號字符型,在進行整型提升時默認補0,也就是0000 0000 0000 0000 0000 0000 1111 1111
,按照%d
進行打印后是255
#include int main(){ char a = -128; printf("%u/n",a); return 0; }
結(jié)果:
分析:
#include int main(){ char a = 128; printf("%u/n",a); return 0; }
結(jié)果:
和上一題一樣,因為128和-128發(fā)生截斷后在a里存的數(shù)據(jù)是一樣的
int i = -20; unsigned int j = 10; printf("%d/n", i + j);
結(jié)果:
分析:
因為并沒有對兩個變量的數(shù)據(jù)進行修改,想加過后按照%d的結(jié)果就是兩個數(shù)直接相加的結(jié)果
unsigned int i; for (i = 9;i >= 0;i--) { printf("%u/n", i); }
結(jié)果:
死循環(huán),從9->0->255->0->255,因為無符號數(shù)始終大等于0
int main(){ char a[1000]; int i; for(i=0; i<1000; i++) { a[i] = -1-i; } printf("%d",strlen(a)); return 0; }
結(jié)果:
分析:
#include unsigned char i = 0;int main(){ for(i = 0;i<=255;i++) { printf("hello world/n"); } return 0; }
結(jié)果:
死循環(huán),i 的值從0->255一直循環(huán)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/121412.html
世界上任何一個擁有用戶數(shù)據(jù)的 web 應(yīng)用都必須處理 sessions。作為一名開發(fā)者,我們必須要知道它們是什么以及如何處理它們。在這篇文章中,我想要分享的是: session 是什么? session 如何存儲數(shù)據(jù)? 你如何決定存放 session 數(shù)據(jù)的位置? 在 sessions 工作時,你必須意識到的安全性上的影響有哪些?在一些示例代碼中,我將會運用?session npm modul...
目錄 ? ?一、數(shù)據(jù)類型介紹 二、類型的意義 三、類型的基本歸類 整型家族 浮點數(shù)家族 構(gòu)造類型(自定義類型) 指針類型 空類型 四、整形在內(nèi)存中的存儲 原碼、反碼、補碼 大小端字節(jié)序 為什么有大端和小端? 一道經(jīng)典筆試題 ?一、數(shù)據(jù)類型介紹 數(shù)據(jù)從大的方向分為兩類: 內(nèi)置類型自定義類型內(nèi)置類型我們前面已經(jīng)學(xué)習(xí)過,如下: char? ? ? ? ? ? //字符數(shù)據(jù)類型 short? ? ? ...
摘要:在符號位中,表示正,表示負。我們知道對于整型來說,內(nèi)存中存放的是該數(shù)的補碼。在計算機系統(tǒng)中,數(shù)值一律用補碼來表示和存儲。表示有效數(shù)字,。規(guī)定對于位的浮點數(shù),最高的位是 ...
摘要:當(dāng)重啟時,將會讀取文件進行重放以恢復(fù)到關(guān)閉前的最后時刻。伸縮性受到線程數(shù)的限制,線程數(shù)的調(diào)度對也是不小的負擔(dān)。所以允許我們設(shè)置線程池的大小,對需要從文件中加載相應(yīng)數(shù)據(jù)的讀取請求進行并發(fā)操作,減少阻塞的時間。 存儲原理(持久化) Mongo Mongo的數(shù)據(jù)將會保存在底層文件系統(tǒng),因此存儲容量遠大于redis和memcached。一個database中所有的collections以及索...
閱讀 1876·2021-09-28 09:36
閱讀 2426·2021-09-08 09:35
閱讀 3066·2019-08-30 15:53
閱讀 1553·2019-08-30 14:08
閱讀 664·2019-08-29 18:40
閱讀 2842·2019-08-29 13:57
閱讀 2702·2019-08-29 13:55
閱讀 680·2019-08-26 13:45