-2147483648是不是int常量

來源:互聯網
上載者:User

32位int的表示範圍為:

-2147483648 ~ 2147483647 

但查看VS 2008的標頭檔有如下定義:

#define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */

為什麼不直接定義為:-2147483648呢?

同時我在一本C語言的書中看到,只有在int範圍內的全部由數字組成的值才是int常量。換而言之,0和所有的負整數都不能稱為常量,因為它相當於對常量進行了取負運算,按書中的說法,是運算式。

首先用如下代碼進行驗證:

cout << typeid(-2147483647-1).name() << endl;cout << typeid(-2147483648).name() << endl;

運行結果如下:

int
unsigned long


果然,-2147483648不同於-2147483647-1。

那我們是不是可以這樣理解,對編譯器而言,它首先看到的是正整數2147483648,然後再對其進行求負運算。由於2147483648超出了int的範圍,所以-2147483648也不是int類型了。這也是系統標頭檔中不直接這樣定義INT_MIN的原因吧。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.