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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在C中被簽名為無符號轉(zhuǎn)換-它總是安全的嗎?

在C中被簽名為無符號轉(zhuǎn)換-它總是安全的嗎?

在C中被簽名為無符號轉(zhuǎn)換-它總是安全的嗎?假設(shè)我有以下C代碼。unsigned int u = 1234;int i = -5678;unsigned int result = u + i;這里正在進行什么隱式轉(zhuǎn)換,這段代碼對所有的值都是安全的嗎?u和i?(安全,從某種意義上說,即使結(jié)果在本例中,將溢出到某個巨大的正數(shù),我可以將其轉(zhuǎn)換回INT得到真正的結(jié)果。)
查看完整描述

3 回答

?
慕少森

TA貢獻2019條經(jīng)驗 獲得超9個贊

從簽名到未簽名的轉(zhuǎn)換只需復(fù)制或重新解釋符號值的表示。引用C標(biāo)準(zhǔn)(C99 6.3.1.3):

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

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

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

對于現(xiàn)在幾乎通用的兩種補碼表示,規(guī)則確實對應(yīng)于重新解釋比特。但是對于其他表示(符號和大小或1的補碼),C實現(xiàn)仍然必須安排相同的結(jié)果,這意味著轉(zhuǎn)換不能只是復(fù)制比特。例如,(無符號)-1=UINT_MAX,而不管表示形式如何。

通常,C中的轉(zhuǎn)換定義為在值上操作,而不是在表示上操作。

要回答原來的問題:

unsigned int u = 1234;int i = -5678;unsigned int result = u + i;

i的值轉(zhuǎn)換為無符號int,生成UINT_MAX + 1 - 5678..然后將此值添加到無符號值1234中,生成UINT_MAX + 1 - 4444.

(與無符號溢出不同,簽名溢出會調(diào)用未定義的行為。概括是常見的,但不是C標(biāo)準(zhǔn)所保證的-編譯器的優(yōu)化可能會對做出不合理假設(shè)的代碼造成極大的破壞。)


查看完整回答
反對 回復(fù) 2019-06-20
?
POPMUISE

TA貢獻1765條經(jīng)驗 獲得超5個贊

圣經(jīng):

  • 添加操作將使int轉(zhuǎn)換為無符號int。
  • 假設(shè)兩個補碼表示和大小相等的類型,位模式不會改變。
  • 從無符號int到有符號int的轉(zhuǎn)換取決于實現(xiàn)。(但現(xiàn)在大多數(shù)平臺上,它的工作方式可能與你預(yù)期的一樣。)
  • 在不同大小的有符號和無符號組合的情況下,規(guī)則要復(fù)雜一些。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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