您的位置:首页 > 其它

一个简单的数值比较问题

2007-04-11 09:35 375 查看

#include <stdio.h>




int main(void)


{




        int i = 0xaabbccdd;




        char *p = (char *)&i;




        if (p[0] == 0xdd)


                printf("equal ");


        else


                printf("not equal ");


        return 0;


}

 
程序的本意是当在little-endian的机器(Intel)上运行时,输出equal,然而运行后却输出"not equal“,与预想的想法。

问题出在何处?出在未正确C中的类型提升规则。

在if (p[0] == 0xdd) 这条语句中,运算符“==”的右操作数为整数常量,类型默认为int;左操作数为char型,因此需要进行由char至int的类型提升,由于p[0]的值为0Xdd(符号位为1),根据数据宽度扩展时符号位的扩展规则,p[0]会被扩展为(int)0XFFFFFFDD,自然与(int)0XDD不相等,因此输出"not equal"。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  扩展 c