2010-12-10 77 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