第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么無(wú)符號(hào)整數(shù)溢出定義了行為,而有符號(hào)整數(shù)溢出卻沒有定義?

為什么無(wú)符號(hào)整數(shù)溢出定義了行為,而有符號(hào)整數(shù)溢出卻沒有定義?

C++ C
慕少森 2019-06-20 17:22:30
為什么無(wú)符號(hào)整數(shù)溢出定義了行為,而有符號(hào)整數(shù)溢出卻沒有定義?C和C+標(biāo)準(zhǔn)都很好地定義了無(wú)符號(hào)整數(shù)溢出。例如,C99標(biāo)準(zhǔn) (§6.2.5/9)國(guó)家涉及無(wú)符號(hào)操作數(shù)的計(jì)算永遠(yuǎn)不能在?ow上進(jìn)行,因?yàn)椴荒苡媒Y(jié)果無(wú)符號(hào)整數(shù)類型表示的結(jié)果被減少為模,即大于可以由結(jié)果類型表示的最大值的數(shù)。但是,這兩個(gè)標(biāo)準(zhǔn)都聲明有符號(hào)整數(shù)溢出是未定義的行為。同樣,從C99標(biāo)準(zhǔn)(§3.4.3/1)Unde?Ned行為的一個(gè)例子是?ow上整數(shù)上的行為。有歷史的還是(更好的!)造成這種差異的技術(shù)原因?
查看完整描述

3 回答

?
富國(guó)滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

歷史原因是,大多數(shù)C實(shí)現(xiàn)(編譯器)只使用它使用的整數(shù)表示最容易實(shí)現(xiàn)的溢出行為。C實(shí)現(xiàn)通常使用CPU使用的相同的表示形式,因此溢出行為與CPU使用的整數(shù)表示相同。

在實(shí)踐中,只有符號(hào)值的表示才可能因?qū)崿F(xiàn)而不同:一個(gè)是補(bǔ)語(yǔ),兩個(gè)是補(bǔ)語(yǔ),另一個(gè)是符號(hào)大小。對(duì)于無(wú)符號(hào)類型,標(biāo)準(zhǔn)沒有理由允許更改,因?yàn)橹挥幸粋€(gè)明顯的二進(jìn)制表示(標(biāo)準(zhǔn)只允許二進(jìn)制表示)。

相關(guān)引文:

C99 6.2.6.1:3:

存儲(chǔ)在無(wú)符號(hào)位字段和類型為無(wú)符號(hào)字符的對(duì)象中的值應(yīng)使用純二進(jìn)制表示法表示。

C99 6.2.6.2:2:

如果符號(hào)位為1,則應(yīng)以下列方式之一修改該值:

-符號(hào)位0的相應(yīng)值被否定(符號(hào)和震級(jí));

-符號(hào)位的值為?(2)N) (二補(bǔ));

-符號(hào)位的值為?(2)N?1)(補(bǔ)足).


現(xiàn)在,所有處理器都使用兩種補(bǔ)碼表示,但簽名算術(shù)溢出仍未定義,編譯器制造商希望它保持未定義,因?yàn)樗鼈兝眠@種不確定性來(lái)幫助優(yōu)化。

查看完整回答
反對(duì) 回復(fù) 2019-06-20
?
哆啦的時(shí)光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊

除了Pascal的好答案(我肯定這是主要的動(dòng)機(jī))之外,還有可能一些處理器會(huì)導(dǎo)致有符號(hào)整數(shù)溢出的異常,當(dāng)然,如果編譯器不得不“安排另一種行為”(例如,使用額外的指令檢查潛在的溢出并在這種情況下進(jìn)行不同的計(jì)算),這當(dāng)然會(huì)導(dǎo)致問題。

值得注意的是,“未定義的行為”并不意味著“不起作用”。這意味著在這種情況下,允許執(zhí)行任何它想做的事情。這包括做“正確的事情”以及“報(bào)警”或“崩潰”。如果可能的話,大多數(shù)編譯器都會(huì)選擇“做正確的事情”,假設(shè)這是相對(duì)容易定義的(在本例中是這樣的)。但是,如果計(jì)算中出現(xiàn)溢出,那么了解實(shí)際結(jié)果是很重要的,編譯器可能會(huì)做一些您期望之外的事情(這可能非常取決于編譯器版本、優(yōu)化設(shè)置等)。


查看完整回答
反對(duì) 回復(fù) 2019-06-20
?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

首先,請(qǐng)注意,C11 3.4.3和所有示例和腳注一樣,都不是規(guī)范性文本,因此與引用無(wú)關(guān)!

聲明整數(shù)和浮點(diǎn)數(shù)溢出是未定義行為的相關(guān)文本如下:

C11 6.5/5

如果在計(jì)算表達(dá)式過(guò)程中出現(xiàn)異常情況(即,如果結(jié)果沒有數(shù)學(xué)定義,或者不在其類型的可表示值范圍內(nèi)),則行為是未定義的。

關(guān)于無(wú)符號(hào)整數(shù)類型的行為的明確說(shuō)明可以在這里找到:

C11 6.2.5/9

有符號(hào)整數(shù)類型的非負(fù)值范圍是對(duì)應(yīng)的無(wú)符號(hào)整數(shù)類型的子范圍,每個(gè)類型中相同值的表示形式是相同的。涉及無(wú)符號(hào)操作數(shù)的計(jì)算永遠(yuǎn)不會(huì)溢出,因?yàn)椴荒苡媒Y(jié)果無(wú)符號(hào)整數(shù)類型表示的結(jié)果將被減少,即大于結(jié)果類型所能表示的最大值的數(shù)字。

這使得無(wú)符號(hào)整數(shù)類型成為特例。

還請(qǐng)注意,如果有任何類型的轉(zhuǎn)換到有符號(hào)類型時(shí),舊值不能再表示。然后,這個(gè)行為僅僅是實(shí)現(xiàn)定義的,盡管可能會(huì)產(chǎn)生一個(gè)信號(hào)。

C11 6.3.1.3

6.3.1.3有符號(hào)整數(shù)和無(wú)符號(hào)整數(shù)

當(dāng)具有整數(shù)類型的值轉(zhuǎn)換為_bool以外的另一個(gè)整數(shù)類型時(shí),如果該值可以由新類型表示,則它將保持不變。

否則,如果新類型沒有符號(hào),則通過(guò)重復(fù)添加或減去比新類型中可以表示的最大值多一個(gè)值來(lái)轉(zhuǎn)換值,直到該值位于新類型的范圍內(nèi)為止。

否則,將對(duì)新類型進(jìn)行簽名,并且不能在其中表示值;結(jié)果要么是實(shí)現(xiàn)定義的,要么引發(fā)實(shí)現(xiàn)定義的信號(hào)。


查看完整回答
反對(duì) 回復(fù) 2019-06-20
  • 3 回答
  • 0 關(guān)注
  • 1312 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)