今天在看APUE(人邮影印版)p606页程序时,发现其中有一行代码不甚理解,其所处环境大概是这样的:
char buf[MAXLINE];
char ptr = buf;
int status=-1;
...
{
status = *ptr & 0xFF;
...
}
if(status>=0)
...
将*ptr赋值给status为什么要将高24位置零(& 0xFF)呢?
刚开始以为是因为char所占内存位数较少,将其赋值给int时,int数据多余的位数填0还是填1是未定义的,第一次学着查阅C99标准,无果(那个东东跟法律条文一样,读着拗口的很,最郁闷的是不知道怎么翻)
一阵捣腾之后在TC++PL附录C.3.4找到原因:将char取为unsigned char还是signed char是平台相关的。
现在再回到前面的代码,status被初始化为-1,而后面需要判断status是否大于零(在本程序中其具体数值不重要),以此来判断代码块中的语句是否执行,所以如果这里char被定义为unsigned,而且恰好获得了一个负值,就影响了后面判断的正确性
阅读(652) | 评论(0) | 转发(0) |