目錄
華容ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!1.問題引入
2.字符型變量的存儲(chǔ)
3.字符型變量的取值
4.字符型變量中的-128
5.取值轉(zhuǎn)換圖
? 我們知道,在C語言中,一個(gè)字符型數(shù)據(jù)占8個(gè)bit位,那么當(dāng)我們定義一個(gè)字符型數(shù)據(jù),我們需要給它賦上什么范圍的值才合適呢。是[-127,127],還是[-128,127],亦或者是[-127,128]?下面就讓我們進(jìn)入本篇文章的內(nèi)容:字符型變量的存儲(chǔ)和取值。
2.字符型變量的存儲(chǔ)將字符變量存儲(chǔ)到內(nèi)存中中,實(shí)際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ASCII 碼放到內(nèi)存中。因此它的存儲(chǔ)形式就與整數(shù)的存儲(chǔ)形式類似。不同的是,字符型數(shù)據(jù)占8個(gè)bit位,而整形數(shù)據(jù)占32個(gè)bit位,比特位的位數(shù)不同也就說明著它們的取值范圍不同,如果對(duì)字符型數(shù)據(jù)的賦值超過了所能表示的范圍,則數(shù)據(jù)將會(huì)發(fā)生截?cái)?,?dǎo)致出錯(cuò)。例如:
我們定義一個(gè)字符數(shù)據(jù)
char c=10;
由于在計(jì)算機(jī)中數(shù)據(jù)是以二進(jìn)制補(bǔ)碼的形式存放,所以我們將整數(shù)10轉(zhuǎn)化為二進(jìn)制補(bǔ)碼,然后取前8位放入c中進(jìn)行存放,對(duì)應(yīng)圖解如下:
而如果我們定義了
char c=129 ;
那么其對(duì)應(yīng)的存放圖解如下:?
我們可以發(fā)現(xiàn),此時(shí)c的最終結(jié)果并不是129而是-127,說明129超出了字符型變量的表示范圍,所以導(dǎo)致數(shù)據(jù)的存儲(chǔ)出現(xiàn)了錯(cuò)誤。
3.字符型變量的取值? 在將取值之前,先拋出一句我認(rèn)為說得很好的一句話:
計(jì)算機(jī)所謂的特定數(shù)據(jù)類型能表示多少范圍數(shù)據(jù),取決于多少比特位的排列組合,比如4個(gè)比特位就一定可以表示2^4個(gè)數(shù)據(jù),計(jì)算機(jī)絕對(duì)不會(huì)浪費(fèi)任何一種組合。
? 根據(jù)這句話我們就可以先斷定,一個(gè)字符型變量一定可以表示2^8,也就是256個(gè)數(shù)據(jù)。我們先按照符號(hào)位對(duì)字符型變量進(jìn)行如下拆分:
按照以上分析,那么我們字符型變量的取值范圍就是[-127,127]嗎,實(shí)則不然。細(xì)心的小伙伴可能會(huì)發(fā)現(xiàn),無論是上面還是下面,都有0這個(gè)數(shù)據(jù)的表示方式,分別為0000 0000和1000 0000;而在計(jì)算機(jī)中,我們當(dāng)然不能讓0有兩種表示方式,否則會(huì)引起歧義。因此我們將0000 0000來表示0。而前面我們說過,計(jì)算機(jī)絕對(duì)不會(huì)浪費(fèi)任何一種組合,所以,我們還需對(duì)1000 0000進(jìn)行定義,賦予其意義。
我們不妨先來猜猜,1000 0000要表示什么呢?由于數(shù)據(jù)的取值范圍肯定是連續(xù)的最好,所以我們可以在128和-128進(jìn)行選取,又由于1000 0000最高位即符號(hào)位為1,所以我們猜測(cè)1000 0000代表-128。則字符型數(shù)據(jù)的表示范圍就是[-128,127]。
4.字符型變量中的-128? 那么,為什么在字符型變量1000 0000代表-128呢?我們依舊來分析一下如下語句:
char c=-128;
我們知道,當(dāng)我們定義了一個(gè)變量c時(shí),編譯器對(duì)c分配了8個(gè)bit位的內(nèi)存空間,但是對(duì)于-128,它一開始并不是在變量c的內(nèi)存空間中,是在寄存器中,需要先轉(zhuǎn)化為二進(jìn)制后,才能放入c中,因此我們可以得到以下圖解:
? 我們可以發(fā)現(xiàn),十分巧合的是,當(dāng)-128在寄存器中轉(zhuǎn)化為二進(jìn)制補(bǔ)碼后,截?cái)啻嫒隿中時(shí),存放的數(shù)據(jù)正是1000 0000,也就是我們上述所猜想的那樣。?
那如果我們將此時(shí)c中存放的1000 0000取出來,會(huì)不會(huì)還是-128呢?遺憾的是,由于數(shù)據(jù)發(fā)生的截?cái)?,所以無法正確的轉(zhuǎn)化回來。具體過程如下:
5.取值轉(zhuǎn)換圖顯然,最后轉(zhuǎn)化后的原碼并不是-128。所以我們可以說在字符型數(shù)據(jù)中1000 0000表示-128是一種半計(jì)算半規(guī)定的方式。因此以后我們?cè)谧址妥兞恐锌吹?000 0000,不必再進(jìn)行轉(zhuǎn)化,可以將其直接看成-128。
? 綜上,我們可以得出一個(gè)8bit位的char類型變量所能表示的范圍是[-128,127].如果超出了這個(gè)范圍,就會(huì)發(fā)生截?cái)啵a(chǎn)生錯(cuò)誤。根據(jù)以下轉(zhuǎn)換圖我們可以輕松得出截?cái)嗪蟮臄?shù)字:
例如以下兩個(gè)例子
char c=128;
char c=-129;
對(duì)于例1,因?yàn)?28=127+1,根據(jù)順時(shí)針方向?yàn)檎较颍瑒tc最后的值就為127下一個(gè)數(shù)字-128?。
對(duì)于例2,因?yàn)?129=-128-1,所以需要取-128負(fù)方向也就是逆時(shí)針方向的下一個(gè)數(shù)字,則c最后的值就是127。
以上,就是本期的全部?jī)?nèi)容。
制作不易,能否點(diǎn)個(gè)贊再走呢qwq
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:字符型變量的存儲(chǔ)和取值-創(chuàng)新互聯(lián)
鏈接URL:http://m.rwnh.cn/article32/dopisc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、響應(yīng)式網(wǎng)站、Google、網(wǎng)站策劃、企業(yè)建站、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)