C语言运算表达式整理

C语言的运算规则是按照运算符的优先级进行的,所以我们首先看一下C的运算优先级别
C语言运算表达式整理

总结 最简单的优先级就是

  1. 算数运算符>关系运算符>逻辑运算符>赋值运算符

然后我们还要了解一个短路规则(特性)

短路规则:在整个逻辑表达式中,同级运算符从左到右运算,当前一个分表达式的运算结果能确定整个表达式的值时,再向右的表达式统统免于运算,而以当前这个分表达式的值作为整个表达式的值。

  1. (表达式1)&&(表达式2) 如果表达式1为假,则表达式2不会进行运算,即表达式2“被短路”
    (表达式1)||(表达式2)如果表达式1为真,则表达式2不会进行运算,即表达式2“被短路”

1.i++和++i的区别;

i++相当于i=i+1;i++的意思是先将i进行赋值,然后在自行加1;
++i也是相当于i=i+1;而++i的意思是先i自加1在进行赋值;
参考代码
int a=1,b,c,z=1;
b=a++; //a先将1赋值给b,b=1,;然后a在自增1;此行运行结束a=2
c=++z; //z先自增1为2然后在赋值给c,c=2;
printf(“表达式的值为:%d\n%d\n”,b,c); //输出结果为1和2;
i–和--i同理;

2.逻辑运算表达式

在C语言中true为1,false为0,翻译过来就是真为1,假为0;
&&两真为真,一假为假; ||一真为真,一假一真也为真;
(表达式1)&&(表达式2) 如果表达式1为假, 则整个表达式为false=0,如果两个都为真返回1;
(表达式1)||(表达式2) 如果表达式1为真,则表达式2不会进行运算直接返回1,如果两个都为假返回0。 //此处有用到短路特性
例:
a=3>2 || 6 //3>2成立直接返回1; 3>2也是返回1的,用不到6
a=3>2 && 0 //3>2 就返回1了这时候1与0一真一假返回0;
a=!n; //n等于任何数a都等于0;

3.复合运算表达式

a+=3等价于a=a+3;这种就是最简单的复合运算表达式;()
复杂一些的有a=1;a=a+=a*=5 等价于 a=a=(a+(a=a*5))最后等于10;它的计算规则是从右往左进行的。不管有多少层的计算都是相同。

4.逗号表达式

逗号表达式:表达式1,表达式2
逗号表达式的求解过程是从左到右依次进行的,但是逗号表达式会将最后一个表达式的值作为整个表达式的答案。
例:
b=(a=35,45,a+2) //a=15 ,表达式b=17;求解中先计算第一个表达式a=3*5=15,然后计算第二个,在计算第三个15+2为17。括号很重要如果没有括号b会为15;

5.条件运算表达式

条件运算符: ? : 它是唯一的一个三目运算符
表达式1?表达式2:表达式3 它的意思是当表达式1成立就执行表达式2,如果不成立就执行表达式3;
例如:
3>2 ? a:b //返回a
3>5 ? a:b //返回b

6.左移与右移计算

左移相当于十进制2,右移相当于/2;
让二进制左移N位,高位丢弃,低位补0,得到的 新值 = 原值
2^N,
作用:实现二倍乘除运算(右移几位相当于除于二的几次方。左移几位,相当于乘上二的几次方。)
问题:int是有符号类型,左移可能会把符号左移出去,发生溢出