可以發現a的值總是會增加1,b的值正好是a的結果的三倍再減2.
這個運算涉及a, b兩個變數的值的改動,各變數均需考慮。
以a初值為0為例,則運算結果是a的值為1,b的值也是1。
a的初值為0時,實驗1
把實驗資料從擴張到0-100,使a的值分別從100開始取。
a的初值為100,99,…,實驗2
更多資料,實驗2
當然,還有臨界的,接近資料型別表達能力限度的資料需要測試
int的資料範圍在+2147483647~-2147483648,即機內碼(補碼)0x7fffffff~0x80000000,而c語言計算超過範圍的數不會報錯。
第一行結果用補碼錶示即
a=0x80000000,b=0x7ffffffe
三個a相加即0x180000000,但是不幸,左邊那個1,放不下,所以結果就是0x80000000(十進位制-2147483648),再減2就是0x7ffffffe(十進位制2147483646)。
這樣看來之前的想法是對的。
補碼可以用%x來看,實驗3的圖
可以發現a的值總是會增加1,b的值正好是a的結果的三倍再減2.
這個運算涉及a, b兩個變數的值的改動,各變數均需考慮。
以a初值為0為例,則運算結果是a的值為1,b的值也是1。
a的初值為0時,實驗1
把實驗資料從擴張到0-100,使a的值分別從100開始取。
可以發現a的值總是會增加1,b的值正好是a的結果的三倍再減2.
a的初值為100,99,…,實驗2
更多資料,實驗2
當然,還有臨界的,接近資料型別表達能力限度的資料需要測試
int的資料範圍在+2147483647~-2147483648,即機內碼(補碼)0x7fffffff~0x80000000,而c語言計算超過範圍的數不會報錯。
第一行結果用補碼錶示即
a=0x80000000,b=0x7ffffffe
三個a相加即0x180000000,但是不幸,左邊那個1,放不下,所以結果就是0x80000000(十進位制-2147483648),再減2就是0x7ffffffe(十進位制2147483646)。
這樣看來之前的想法是對的。
補碼可以用%x來看,實驗3的圖