gogo专业大尺度亚洲高清人体,美女张开双腿让男生桶,亚洲av无码一区二区三区鸳鸯影院,久久久久国产精品人妻

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Char溢出問題分析

Char溢出問題分析 時(shí)間:2017-11-02      來源:未知

直奔主題,先上一道例題,大家思考一下,為什么答案是這個(gè)樣子!

下面是linux系統(tǒng)的輸出結(jié)果:

(1)幾點(diǎn)基礎(chǔ)注意

變量定義:是在內(nèi)存中確定變量的位置和大小,即:定義時(shí)分配內(nèi)存。例如:int a;

賦值:是在擦除對(duì)象當(dāng)前值,并用新的值代替。例如:a = 2;

初始化:先分配內(nèi)存,再進(jìn)行賦值操作。

(2)原碼、反碼、補(bǔ)碼

機(jī)器數(shù):一個(gè)數(shù)在計(jì)算機(jī)中是以二進(jìn)制形式存儲(chǔ)的,這個(gè)數(shù)就是機(jī)器數(shù)。機(jī)器數(shù)的高位是符號(hào)位,正數(shù)為0,負(fù)數(shù)為1。

真值:除了符號(hào)位,其余位對(duì)應(yīng)的值是真值。

例如:1000 0001 真值是-1,不是129。

原碼:符號(hào)位加上真值的絕對(duì)值。

例如:[+1]原碼:0000 0001,[-1]原碼:1000 0001

反碼:正數(shù)的反碼是其本身,負(fù)數(shù)的反碼是在原碼的基礎(chǔ)上,符號(hào)位不變,其余為取反。

例如:[+1]反碼:0000 0001,[-1]反碼:1111 1110

補(bǔ)碼:正數(shù)的補(bǔ)碼是其本身,負(fù)數(shù)的補(bǔ)碼是其反碼加1。

例如:[+1]補(bǔ)碼:0000 0001,[-1]補(bǔ)碼:1111 1111

整型數(shù)據(jù)在內(nèi)存中是以補(bǔ)碼的形式存儲(chǔ)的。要得到負(fù)數(shù)的真值需要得到原碼。補(bǔ)碼的補(bǔ)碼就是其原碼。

(3)%d和%x

%d:是有符號(hào)位輸出,那么首先看補(bǔ)碼的符號(hào)位,是正是負(fù);是正,補(bǔ)碼就是原碼;是負(fù),補(bǔ)碼的補(bǔ)碼才是原碼,也才是輸出結(jié)果。

%x:是16進(jìn)制數(shù)輸出,輸出時(shí)是4字節(jié),32位。如果不夠4字節(jié)要進(jìn)行擴(kuò)展,并且高位全部用符號(hào)位來填充。

(4)分析計(jì)算

char a = 247;

系統(tǒng)分配1個(gè)字節(jié)內(nèi)存大小,里面存儲(chǔ)正數(shù)247的補(bǔ)碼,即:1111 0111(正數(shù)的補(bǔ)碼就是原碼)。

%d輸出:首先看高位,變量a是char類型,8位,高位是1,代表是負(fù)數(shù),現(xiàn)在內(nèi)存中存儲(chǔ)的是其補(bǔ)碼,要得到輸出的原碼,需要得到現(xiàn)在補(bǔ)碼的補(bǔ)碼(補(bǔ)碼的補(bǔ)碼是原碼),即: 1111 0111 ------ 反碼:1000 1000 ------ 補(bǔ)碼:1000 1001,此時(shí)的補(bǔ)碼就是真正的原碼:-9,所以輸出結(jié)果就是-9。

%x輸出:現(xiàn)在存儲(chǔ)的是:1111 0111,即:0xf7,要注意%x是4字節(jié)輸出,此時(shí)是char類型,輸出時(shí)要進(jìn)行默認(rèn)轉(zhuǎn)換,轉(zhuǎn)換成32位,并且高位全部用符號(hào)位填充,即:1111 1111 1111 1111 1111 1111 1111 0111,是0xff ff ff f7。

上一篇:FS4412 移植 libiconv庫

下一篇:Qt打包文檔(window平臺(tái))

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部