1. 程式人生 > 其它 >不同標準下的C語言常量範圍的預設型別的檢測 (測試樣例為C90與C99)

不同標準下的C語言常量範圍的預設型別的檢測 (測試樣例為C90與C99)

不同標準下的C語言常量範圍的預設型別的檢測

 

一、C90與C99標準下的不同常量範圍的預設型別

 

 

  • C90標準下對不同常量範圍預設型別的檢測實現及執行結果:
  • C99標準下對不同範圍預設型別的檢測實現及執行結果:

 

 

  • 結論
  1. 在C90的標準下:

2147483648被計算機認為帶符號數,而2147483647則作為無符號數與之進行運算。

根據計算機中C語言的規則,如果去運算中既有無符號的數又有有符號的整數,將兩個資料均當作無符號數處理。

2147483648無符號表示為100。。。0(31個0), 而2147483647無符號表示為011。。。1(31個1),根據比較得出前者大,故輸出結果為false。

-2147483648先處理其資料表示一個無符號數表示為100。。。0(31個0)減去1後即為011。。。1(31個1)而後者2147483647在C90標準下作為帶符號數當作無符號數處理其表示仍為011。。。1(31個1),故最後兩者的值相等。

 

  1. 在C99的標準下:

2147483648與2147483647均作為帶符號數,故而-2147483648與2147483647可以按帶符號數比較大小,並且後者大於前者。同理,-2147483648-1與2147483647均被當作帶符號數處理,故後者大於前者。