2010-12-10 57 views
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?

謝謝您的回答...

+1

我也遇到過這個問題。 `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

+2

爲char賦值255並不是一個好主意:「否則,新類型是有符號的,並且值不能在其中表示; 結果是實現定義的或者實現定義的信號被引發。 「您只能假定您可以將值最大爲127的值存儲在普通的`char`中。作爲一個簡單的規則,從不使用簡單的`char`進行算術運算。 – 2010-12-10 08:15:20

回答

9

這是實現定義是否char帶符號。

顯然它是在你的x86編譯器上簽名的,在你的PowerPC編譯器上沒有簽名。

爲便於攜帶,請在任何您關心簽名的地方使用unsigned charsigned char