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

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

與負(fù)數(shù)進(jìn)行比較時,為什么會出現(xiàn)sizeof運算符?

與負(fù)數(shù)進(jìn)行比較時,為什么會出現(xiàn)sizeof運算符?

C
森林海 2019-08-23 10:10:39
與負(fù)數(shù)進(jìn)行比較時,為什么會出現(xiàn)sizeof運算符?這里到底發(fā)生了什么?輸出現(xiàn)在為“False”:#include <stdio.h>int main(){      if (sizeof(int) > any_negative_integer)          printf("True");      else          printf("False");      return 0;}如果我將其更改為:if (sizeof(int) < any_negative_integer)輸出為“True”。
查看完整描述

2 回答

?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗 獲得超8個贊

sizeof返回的size_t是無符號的,因此-1被轉(zhuǎn)換為非常大的無符號數(shù)。使用正確的警告級別會對此有所幫助,clang使用-Wconversion-Weverything注意這不是生產(chǎn)用途)標(biāo)志警告我們:

warning: implicit conversion changes signedness: 'int' to 'unsigned long' [-Wsign-conversion]
   if (sizeof(int) > -1)
                   ~ ^~

對于gcc您使用-Wextra標(biāo)志收到類似的警告:

warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if (sizeof(int) > -1)
                    ^

作為參考,我們知道的size_t無符號來自C99標(biāo)準(zhǔn)草案部分7.17 的通用定義它說:

 size_t

這是sizeof運算符的結(jié)果的無符號整數(shù)類型; [...]

注意,它沒有指定關(guān)于類型的任何其他內(nèi)容,在我的特定情況下,它恰好是unsigned long,但它不一定是。

的轉(zhuǎn)化-1是由于正常的算術(shù)轉(zhuǎn)換覆蓋部6.3.1.8 通常的算術(shù)轉(zhuǎn)換這表示:

[...]

否則,如果具有無符號整數(shù)類型的操作數(shù)的秩大于或等于另一個操作數(shù)的類型的秩,則具有有符號整數(shù)類型的操作數(shù)將轉(zhuǎn)換為具有無符號整數(shù)類型的操作數(shù)的類型。

否則,如果帶有符號整數(shù)類型的操作數(shù)的類型可以表示具有無符號整數(shù)類型的操作數(shù)類型的所有值,則具有無符號整數(shù)類型的操作數(shù)將轉(zhuǎn)換為帶有符號整數(shù)類型的操作數(shù)的類型。

否則,兩個操作數(shù)都轉(zhuǎn)換為無符號整數(shù)類型,對應(yīng)于帶有符號整數(shù)類型的操作數(shù)的類型。

因此,唯一的時間-1不會被轉(zhuǎn)換為無符號值,如果int可以表示size_t的所有值,這不是這里的情況。

為什么-1最終成為一個大的無符號值,實際上它最終成為無符號類型的最大值是由于6.3.1.3Signed和無符號整數(shù)部分所說的:

否則,如果新類型是無符號的,則通過重復(fù)地添加或減去一個可以在新類型中表示的最大值來轉(zhuǎn)換該值,直到該值在新類型的范圍內(nèi)。49)

所以我們最終得到:

-1 + (UMAX + 1)

這是:

UMAX

因此最終得到:

if (sizeof(int) > UMAX )


查看完整回答
反對 回復(fù) 2019-08-23
?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗 獲得超14個贊

因為sizeof()返回一個size_t無符號類型。由于在比較之前進(jìn)行隱式轉(zhuǎn)換,比較有符號和無符號類型可能會產(chǎn)生令人驚訝的結(jié)果。


查看完整回答
反對 回復(fù) 2019-08-23
  • 2 回答
  • 0 關(guān)注
  • 876 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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