此-1(char)非彼-1(int)

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芯片这么处理的原因

转载于:https://blog.51cto.com/lishengli/195909

相关资源:台湾版平彼电脑测试软件_比鲁大师好的测试电脑软件-硬件开发其他…

来源:weixin_33940102

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2009年7月23日
下一篇 2009年7月23日

相关推荐