您的位置:首页 > 其它

C陷阱与缺陷 第二章

2016-03-16 21:25 141 查看
有关运算符优先级

1. "<<" 和 "+"
data8 = data4H << 4 +data4L;
这里本意是让高四位的数据,左移四位,然后和低四位相加,但是因为 “+”的运算符优先级 高于 "<<",所以会导致如下的情况:
data8 = data4H << (4 +data4L);

[align=left] int data8 = 0;[/align]
[align=left] int data4H = 0x06;[/align]
[align=left] int data4L = 0x09;[/align]
[align=left] [/align]
[align=left] data8 = data4H << 4 + data4L; /*错误*/[/align]
[align=left] data8 = data4H << 13; /*上式等价这个移位运算*/[/align]
[align=left] data8 = (data4H << 4) + data4L; /*需要加括号*/[/align]
[align=left] data8 = data4H <<4 | data4L; /*或者使用 或 运算符,其优先级比 “<<” 低*/[/align]
[align=left] [/align]
[align=left]2. 赋值运算符 “=”[/align]

[align=left]while(c =getc(in) != EOF)[/align]
[align=left] putc(c ,out);[/align]

[align=left]这里的意思是,让c赋值getc(in)的返回值,再判断是否到达文件结尾,但是因为 “=”的优先级最低,所以实际上执行的是:[/align]
[align=left] getc(in) !=EOF[/align]
[align=left]的比较值,赋值给c,[/align]
[align=left]c中实际上只会出现0,1 这两种值。[/align]
[align=left]所以必须加括号[/align]
[align=left] while(c=getc(in) !=EOF)[/align]
[align=left] [/align]
[align=left] [/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: