【发布时间】:2010-12-10 06:57:15
【问题描述】:
这是测试代码。
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“通常”是签名的,但在 PowerPC Linux 上,它是未签名的。当我发现这一点时,我正在 PowerPC 上进行编码,并且有这个代码:unsigned char charflag[256]; ... charflag[c] & CF_WHITE。问题是,当c是非ASCII 类型的字符时,当char被签名时,它会导致负索引。解决方法是说charflag[(unsigned char)c],因为这样可以防止虚假符号扩展。 -
将 255 的值赋给一个 char 无论如何都不是一个好主意:“否则,新类型是有符号的,并且值不能在其中表示;结果要么是实现定义的,要么是实现-定义的信号被提出。”您只能假设您可以在纯
char中存储最多 127 个值。作为一个简单的规则,永远不要使用普通的char进行算术运算。