1
這是測試代碼。gcc(v4.1.2交叉編譯器)整數提升問題
char ch = 0xff;
int i = ch;
printf("%d\n", i);
在I386 GCC-4.4.5,輸出爲-1。但在powerpc-e300c3-linux-gnu-gcc-4.1.2(MPC8315交叉編譯器)中,的輸出是255。
出了什麼問題? 爲什麼gcc-4.1.2輸出是255?
謝謝您的回答...
這是測試代碼。gcc(v4.1.2交叉編譯器)整數提升問題
char ch = 0xff;
int i = ch;
printf("%d\n", i);
在I386 GCC-4.4.5,輸出爲-1。但在powerpc-e300c3-linux-gnu-gcc-4.1.2(MPC8315交叉編譯器)中,的輸出是255。
出了什麼問題? 爲什麼gcc-4.1.2輸出是255?
謝謝您的回答...
這是實現定義是否char
帶符號。
顯然它是在你的x86編譯器上簽名的,在你的PowerPC編譯器上沒有簽名。
爲便於攜帶,請在任何您關心簽名的地方使用unsigned char
或signed char
。
我也遇到過這個問題。 `char`是「通常」簽名的,但在PowerPC Linux上,它是無符號的。當我發現這一點時,我在PowerPC上進行了編碼,並且有這樣的代碼:`unsigned char charflag [256]; ... charflag [c]&CF_WHITE`。問題是,當`c`是非ASCII類型的char時,當`char`簽名時會導致負指數。解決的辦法是說`charflag [(unsigned char)c]`,因爲這可以防止虛假的符號擴展。 – 2010-12-10 07:45:24
爲char賦值255並不是一個好主意:「否則,新類型是有符號的,並且值不能在其中表示; 結果是實現定義的或者實現定義的信號被引發。 「您只能假定您可以將值最大爲127的值存儲在普通的`char`中。作爲一個簡單的規則,從不使用簡單的`char`進行算術運算。 – 2010-12-10 08:15:20