?在學(xué)習(xí)C語(yǔ)言的時(shí)候偶爾看到了一個(gè)這樣的代碼,unsigned int a=-10;乍一眼看上去這不就是錯(cuò)的嗎?一個(gè)負(fù)數(shù)怎么能夠放到一個(gè)無符號(hào)整形里面去。如果你這樣想,那你就有必要看看我這篇文章了。
武侯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)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!?首先我們需要了解一個(gè)數(shù)據(jù)是怎么存儲(chǔ)的,就比如說需要存儲(chǔ)這個(gè)-10,首先就需要?jiǎng)?chuàng)建一個(gè)變量a,創(chuàng)建變量a,需要在棧區(qū)開辟一塊內(nèi)存空間,而因?yàn)橛?jì)算機(jī)只認(rèn)識(shí)二進(jìn)制的數(shù)據(jù),所以這個(gè)-10需要先轉(zhuǎn)換成二進(jìn)制的形式,換句話說,在數(shù)據(jù)存儲(chǔ)到內(nèi)存之前數(shù)據(jù)自身就已經(jīng)準(zhǔn)備好了存放到內(nèi)存所需要的格式了,所以數(shù)據(jù)存儲(chǔ)根本就不關(guān)心把數(shù)據(jù)存到的那個(gè)變量的類型是什么,反正我就準(zhǔn)備好了一個(gè)二進(jìn)制的補(bǔ)碼給你,你給我存進(jìn)去,你是什么類型根本就不影響我這個(gè)數(shù)據(jù)的內(nèi)容,因?yàn)樵诜胚M(jìn)內(nèi)存之前我就已經(jīng)準(zhǔn)備好了,那如果這樣說的話,這個(gè)unsigned int 類型在這里有什么意義呢?為什么還要寫這個(gè)類型呢?
?雖然這個(gè)unsigned int 在數(shù)據(jù)存進(jìn)去的時(shí)候沒有什么作用,但是它肯定有自己的作用的,它的作用其實(shí)體現(xiàn)在取出數(shù)據(jù)的時(shí)候,當(dāng)你的變量是signed int類型的時(shí)候,編譯器會(huì)把內(nèi)存中的這個(gè)數(shù)據(jù)當(dāng)作有符號(hào)數(shù)處理,即取出的時(shí)候會(huì)按照原碼,反碼,補(bǔ)碼的規(guī)則把這個(gè)補(bǔ)碼轉(zhuǎn)化成原碼,(原碼,反碼,補(bǔ)碼的轉(zhuǎn)換規(guī)則在文章結(jié)尾)得到的就是原碼就是1000 0000 0000 0000 ...1010,其中第一位看作符號(hào)位,1表示這個(gè)數(shù)是負(fù)數(shù),所以取出來的數(shù)就是-10,而如果你的變量是ungigned int 類型的時(shí)候,那么編譯器就會(huì)把內(nèi)存中的這個(gè)補(bǔ)碼看成是無符號(hào)的,即第一位也看成是有效位,而且無符號(hào)數(shù)的原碼,反碼,補(bǔ)碼是一樣的,所以翻譯出來的原碼是1111 1111 1111 1111 ...? 1111 0110了,所以取出來的數(shù)是4294967286。
? 總結(jié):
? 變量存的過程:
? 字面數(shù)據(jù)必須先轉(zhuǎn)成補(bǔ)碼,再放入空間當(dāng)中,所以,所謂符號(hào)位,完全看數(shù)據(jù)本身是否攜帶+-號(hào),和變量是否有符號(hào)無關(guān)。
? 變量取的過程:
? 取數(shù)據(jù)一定要先看變量本身類型,然后才決定要不要看最高符號(hào)位,如果不需要,直接二進(jìn)制轉(zhuǎn)成十進(jìn)制,如果需要,則需要轉(zhuǎn)成原碼,然后才能識(shí)別。(當(dāng)然符號(hào)位在哪里,又要明確大小端)
?所以u(píng)nsigned int a=-10這種寫法并沒有錯(cuò)誤。你學(xué)會(huì)了嗎?
補(bǔ)充:
原碼,反碼,補(bǔ)碼轉(zhuǎn)換規(guī)則:
正數(shù)和無符號(hào)數(shù)的原碼,反碼,補(bǔ)碼是一樣的,無需轉(zhuǎn)換。而負(fù)數(shù)需要轉(zhuǎn)換。
原碼>反碼>補(bǔ)碼
原碼的符號(hào)位不變,其他位按位取反得到反碼,反碼加一得到補(bǔ)碼。
補(bǔ)碼>原碼
方法一:補(bǔ)碼減一,再符號(hào)位不變,其他位按位取反得到原碼。
方法二:補(bǔ)碼再做一遍從原碼變成補(bǔ)碼的步驟,即補(bǔ)碼的符號(hào)位不變,其他位按位取反(需要注意的是這里得到的結(jié)果并不是反碼),得到的結(jié)果加一也能得到原碼。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:C語(yǔ)言中unsignedinta=-10,這種寫法是否正確?-創(chuàng)新互聯(lián)
瀏覽路徑:http://jinyejixie.com/article12/ccpddc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、定制開發(fā)、搜索引擎優(yōu)化、企業(yè)建站、面包屑導(dǎo)航、微信公眾號(hào)
聲明:本網(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)
猜你還喜歡下面的內(nèi)容