Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152150
  • 博文数量: 54
  • 博客积分: 1732
  • 博客等级: 上尉
  • 技术积分: 520
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-23 23:29
文章分类

全部博文(54)

文章存档

2011年(3)

2010年(26)

2009年(25)

分类: C/C++

2010-04-09 00:15:29

今天在看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) |
给主人留下些什么吧!~~