![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj95ViXQDYgEkwlTAXv7tazY9OHMuUVzhcVtjSHnri8sCToXFqG1YGEnn4enMuOZKfQms7_4TT8xzzcT3yUcGxO6WOa1z_CJLM3LG_0RpLJ0AlGX-blHfviIekB2nqJ3IURvwIJsBx39Xee/s640-Ic42/P1390122.JPG) |
不經一事不長一智 |
還真不知道怎麼寫這個標題, 從程式碼看結果。
d.cpp 應該要印出 yy 還是 zz 呢? 答案可能出乎你的意料之外, 回答 yy 或是 zz 的朋友恭喜你們都答對了。
怎麼辦? 把 char c = 0xff; 改成 unsigned char c = 0xff; 就可以得到相同結果 yy; 而把 char c = 0xff; 改成 signed char c = 0xff 則會得到相同結果 zz。
以下的 gcc option 也可以做到類似的效果。
看來還是把 char 的 signed/unsigned 指定好比較保險。
arm 版本的 gcc char 是 unsigned char; x86 版本的 gcc char 是 signed char。
感謝大大,又增加了一點知識。
回覆刪除這以前寫DOS程式好像就遇過類似問題
回覆刪除Turbo/Borland C 也可以預設 char 是 unsigned 或是 signed
個人偏好用unsigned 因為常常需要處理 raw/binary 跟硬體有關的東西
這個坑很大, 好幾位朋友都踩過。
回覆刪除