亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

在C / C ++中很久很久

在C / C ++中很久很久

C++ C
慕神8447489 2019-11-28 10:39:20
我正在GNU的C ++編譯器上嘗試此代碼,但無法理解其行為:#include <stdio.h>;int main(){    int  num1 = 1000000000;    long num2 = 1000000000;    long long num3;    //num3 = 100000000000;    long long num4 = ~0;    printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3));    printf("%d %ld %lld %llu", num1, num2, num3, num4);    return 0;}當我取消注釋注釋行時,代碼將無法編譯并給出錯誤:錯誤:整數常量對于長型而言太大但是,如果代碼按原樣編譯并執行,它將產生比10000000000大得多的值。為什么?
查看完整描述

3 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

字母100000000000組成一個文字整數常量,但該值對于type而言太大int。您需要使用后綴來更改文字的類型,即


long long num3 = 100000000000LL;

后綴LL使文字變為type long long。C不夠“聰明”,無法從左側的類型得出結論,該類型是文字本身的屬性,而不是使用它的上下文。


查看完整回答
反對 回復 2019-11-28
?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

這取決于您以哪種模式進行編譯。long long不是C ++標準的一部分,而是(通常)僅作為擴展支持。這會影響文字的類型。如果int足夠大以表示數字,則不帶任何后綴的十進制整數常量始終為int類型,否則為long。如果該數字太長了,結果將是實現定義的(可能只是為了向后兼容而被截斷的long int類型的數字)。在這種情況下,您必須顯式使用LL后綴來啟用long long擴展(在大多數編譯器上)。

下一個C ++版本將正式支持long格式,除非您明確希望將文字類型的類型強制設置為long格式,否則您將不需要任何后綴。如果數字不能用長整數表示,則即使沒有LL后綴,編譯器也會自動嘗試使用long long。我相信這也是C99的行為。


查看完整回答
反對 回復 2019-11-28
  • 3 回答
  • 0 關注
  • 615 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號