[关闭]
@Arbalest-Laevatain 2018-06-06T12:50:32.000000Z 字数 620 阅读 572

C语言易错点01 运算符与表达式

C语言


算术运算符

除法运算符“/”

  1. float a=1/2;
  2. printf("a=%f\n",a);

结果:
a=0.000000
原因分析:
由于常量1和2均是整型,而整型量之间相除,如果结果是小数会直接把小数点后面的舍去,所以输出是0
正确的做法是:

  1. float a=1/2.0;
  2. //或 a=1.0/2;

由于计算的时候会自动进行强制类型转换,把所有变量向精度高的方向转,而float精度比int高,故输出会是小数

自加自减运算符 “++”、“--”

关键在于分清,前缀与后缀的区别:
前缀加:

  1. ++i;

当前表达式运行前,i+1,然后运行表达式
后缀则是

  1. i--;

当前表达式运行后,i+1,运行表达式的时候,i还是之前的值

运算符的优先级

规律一:

一个运算符操作数越多,优先级越低
单目双目三目

规律二:

赋值运算符比绝大多数的运算符都低

运算符的结合性

除了赋值运算符之外,都是从左往右,赋值运算符是从右往左

强制类型转换

类型符一定在括号里面

  1. (int)x;
  2. (float)(x+y);
  3. (double)(5%3);

逻辑表达式

短路计算

  1. int a=1,b=2;
  2. if ((a=a-1) && (b=b+3))
  3. a+1;
  4. printf("a=%d,b=%d\n",a,b);
  5. return 0;

输出结果:
a=0,b=2;

  1. int a=1,b=2;
  2. if ((b=b+3) || (a=a-1))
  3. a+1;
  4. printf("a=%d,b=%d\n",a,b);
  5. return 0;

输出结果:
a=1,b=5;

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注