AS400: 此-1(char)非彼-1(int)在AS400(现在叫IBM i)上,发现了一个奇怪的问题,一个char类型的-1(0xff)和一个int类型的-1(0xffffffff)不相等,两者进行比较时,char类型的-1被转换成了int类型的0x000000ff,导致两者不相等。 #define UNKNOWN (-1)#define UNKNOWN1 (0x000000FF)int main(){ int a = UNKNOWN; char b = UNKNOWN; if (a != UNKNOWN) printf (“a!=UNKNOWNn”); if (b != UNKNOWN) printf (“b!=UNKNOWNn”); if ((int)b != UNKNOWN) printf (“(int)b!=UNKNOWNn”); if (b != (char)UNKNOWN) printf (“b!=(char)UNKNOWNn”); if (b != UNKNOWN1) printf (“b!=UNKNOWN1n”); if ((int)b != UNKNOWN1) printf (“b!=UNKNOWN1n”); return 0;}输出结果如下: b!=UNKNOWN (int)b!=UNKNOWN 按照原理,当一个char转换为一个int时,应当用符 位去填充高位的3个字节,这样保证新的int值和原来的char值相同。显然这里是直接补0了。直接补0,对于我们开发人员是有影响的。尤其是当我们编写可移植的软件时,比较前最好将长类型强制转换为短类型,否则由于平台的不同,软件的行为会不一样。这个应该是Power PC芯片的处理方式的问题吧,因为AIX上面用gcc编译也存在这个问题。哪位达人清楚Power PC芯片这么处理的原因
相关资源:台湾版平彼电脑测试软件_比鲁大师好的测试电脑软件-硬件开发其他…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!