此-1(char)非彼-1(int)
原创
©著作权归作者所有:来自51CTO博客作者lishengli的原创作品,如需转载,请与作者联系,否则将追究法律责任
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!=UNKNOWN\n");
if (b != UNKNOWN)
printf ("b!=UNKNOWN\n");
if ((int)b != UNKNOWN)
printf ("(int)b!=UNKNOWN\n");
if (b != (char)UNKNOWN)
printf ("b!=(char)UNKNOWN\n");
if (b != UNKNOWN1)
printf ("b!=UNKNOWN1\n");
if ((int)b != UNKNOWN1)
printf ("b!=UNKNOWN1\n");
return 0;
}
输出结果如下:
b!=UNKNOWN
(int)b!=UNKNOWN
按照原理,当一个char转换为一个int时,应当用符号位去填充高位的3个字节,这样保证新的int值和原来的char值相同。显然这里是直接补0了。
直接补0,对于我们开发人员是有影响的。尤其是当我们编写可移植的软件时,比较前最好将长类型强制转换为短类型,否则由于平台的不同,软件的行为会不一样。
这个应该是Power PC芯片的处理方式的问题吧,因为AIX上面用gcc编译也存在这个问题。
哪位达人清楚Power PC芯片这么处理的原因?
上一篇:一个线程死锁问题的分析
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Linux下的权限是什么?shell运行原理 Linux的用户分类 Linux中权限 粘滞位 遮掩码umask
-
char是什么类型 ios char是干嘛的
c语言基本数据类型包括 1.常量 2.整型和浮点型 &n
char是什么类型 ios c语言 c++ 算法 单引号