c语言基础——运算符表达式

时间:2021-01-15 01:44:20

运算符与表达式

1.优先级与结合性:

优先级决定了各个运算符程序语句的表达式中执行的顺序。当优先级相同时,计算机就开始靠运算符的结合性来决定计算顺序。当运算符为向右结合,那么就先选取最左端的运算符然后将其同该运算符的操作数用()括起来来理解;同理,当运算符为向左结合,那么就选取最右端的运算符将其同该运算符的操作数用()括起来来理解。c语言基础——运算符表达式

2.数据类型转换

1)强制转换

也称强制类型转换,直接将某数据强制转换成指定的数据类型

例:

int a;
float b = 7.8;
a = (int)b;
这时b 的小数部分就会被截断,得到a = 7;将b当整数使用不会改变b 的值,也称为显式转换
2)隐式转换

数据参加运算前要进行下列转换:
char,short→int,float→double

混合运算时数据类型由低级→高级
int  unsigned   long   double

例:

int a = 1;
char b = 'A';
double c = 2.0;

a + b +c = 68.000000
char型先转化为int类型,最后再转化到*double,所以最后得到的是一个double型的数。

3.运算符与表达式

1)赋值运算符

赋值符号:=     
将赋值符右边表达式的值赋给赋值符左边的一个变量。

复合的赋值运算符:(共十个)
  += ,  -= ,  *= ,  /=  ,   %= , 
       <<= ,  >>= ,  &= ,  ^= ,  |=

例: a += 3        等价于     a=a+3
     x *= y+8      等价于     x=x*(y+8)
      x %= 3       等价于     x=x%3

由赋值运算符将一个变量和一个表达式连接起来的式子。
格式为:<变量>  <赋值运算符>   <表达式>

赋值运算符结合率为:“自右而左”。

例:a=b=c=5               a=(b=(c=5))   a,b,c值都是5

2)关系运算符

关系运算符用于两个数值之间的比较运算。

关系运算符的结合率为:“自左而右”。

由关系运算符和操作数组成的表达式称为关系表达式。

关系表达式的值是一个逻辑型的值,即只有两个值(真和假)。
C语言是用1作为真,用0作为假。但是进行运算时,非0即认为真,0才认为假。而表达式的结果为真时,给出真值1。为假时,给出假值0。

例:int x=5;

    int y=3;

    int z=1;

    x>y 结果为1

    z>y 结果为0;

3)逻辑运算符

与:&&

或:||

非:!

例:4  && 0 || 2   的值为1
      5  && !0     的值为1

4)条件运算符

条件运算符:  ? : 它是一个三目运算符。 

条件表达式的一般格式为:
    表达式1  ?  表达式2  :    表达式3       
运算过程:表达式1的结果为真(非0)时,表达式2的计算结果作为条件表达式的值;否则,取表达式3的计算结果为条件表达式的值。

例:a>b?a:b  

a>b 时执行a

反之b

5)自增自减运算符

i++,++i

i--,--i

i++,i-- 后自增/减

++i,--i 先自增/减

例:

int i=1;
a = i++;
b = ++i;
此时a=1,b=2,i=2


结合律:自右向左;

i+++j <=> (i++)+j //c语言贪婪法则,编译器从左向右扫描运算符,尽可能多的组合运算符

对于sizeof这个关键字来讲,在编译时会将它内部的表达式改为最终类型,而不是表达式本身

例:

int i = 10;
printf("%d%d",sizeof(i++),i);
此时输出i为依然为10;

sizeof(i++) i++最终=》sizeof(int) 没有(i++)操作

所以sizeof内部不要有赋值操作