不同標準下的C語言常量範圍的預設型別的檢測 (測試樣例為C90與C99)
阿新 • • 發佈:2022-03-25
不同標準下的C語言常量範圍的預設型別的檢測
一、C90與C99標準下的不同常量範圍的預設型別
- C90標準下對不同常量範圍預設型別的檢測實現及執行結果:
- C99標準下對不同範圍預設型別的檢測實現及執行結果:
- 結論
- 在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),故最後兩者的值相等。
- 在C99的標準下:
2147483648與2147483647均作為帶符號數,故而-2147483648與2147483647可以按帶符號數比較大小,並且後者大於前者。同理,-2147483648-1與2147483647均被當作帶符號數處理,故後者大於前者。