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]
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]
相关文章推荐
- Angularjs $http.post
- MySQL数据库分库分表总结(一)
- 数据结构小总结
- 简单选择排序
- Matlab
- 理解JavaScript中的回调函数
- 异常处理技巧(转)
- 游戏
- 面向对象编程
- LightOJ 1255 - Substring Frequency
- C++typede详解
- 插值原理—线性,球面插值 ,四元数
- 获取被人电话本的小恶意程序(学习用的并非病毒)
- strcasecmp
- 蓝桥杯辅导视频学习-递归与循环
- async和await
- C# MessageBox 消息对话框
- Sigma Function (因子和)
- HDU5636 -- Shortest Path -- floyd
- 导航条的属性