c语言运算符和表达式

                       第六次课-----运算符与表达式
一、运算符和表达式
运算符:+  -  *  /  %
表达式:由操作数和运算符组成的式子,如 a-b,1+2 
C语言中单一的一个变量或者单一的一个常量是最简单的表达式
提问:以下程序是输出变量的值还是表达式的值?
int main(void)
{
    char a = 0;
    char b = 0;
    a = 10;
    b = 15;
    printf("%d",a);
    printf("%d\n",a+b);
}
总结:永远输出表达式的值!!!

1.优先级与结合性
优先级:参照附录C P359 从1开始逐渐减弱
结合性:同一优先级时,从左到右或者从右到左的运算顺序。

2.单目、双目和三目运算符
单目运算符:运算对象只有1个,如:++ -- !
双目运算符:运算符两侧各有一个运算对象,如: + - * /
三目运算符:运算对象有三个,如: ? : 
表达式1 ? 表达式2 : 表达式3
10 < 15 ? 10 : 15

3.算术运算符和算术运算表达式:+ - * / %
+ - * /:只要有一个运算对象是浮点型,则表达式的值为double型。
int main(void)
{
    float a = 0;
    float c = 0;
    a = 7.5;
    c = 7 / 2.0;//c = 3.500000000000000       
        printf("%f\n", c);//14
}
%求余运算符:两个运算对象必须都是整数!
20 % 6.5//错误,不能是小数

  自增++  自减--
++后缀:先读后写
int main(void)
{
    int a = 0;
    a = 20;
    a++;//相当于a = a + 1;  21
    printf("%d\n", a++);//先读后写,先把a 的值(21)读出来,再a = a + 1;
    printf("%d\n", a);//22
}

printf("%d\n", a++);
相当于
printf("%d\n", a);
a = a + 1;

++前缀:先写后读
int main(void)
{
    int a = 0;
    a = 20;
    ++a;//相当于a = a + 1;  a = 21
    printf("%d\n", ++a);//先写后读,先a = a + 1;再把a的值(22)读出来
    printf("%d\n", a);//22
}
printf("%d\n", ++a);
相当于
a = a + 1; 
printf("%d\n", a);

4.关系运算符和关系运算表达式:> < == >= <= !=
关系运算表达式的值为“真”或者“假”用“1”和“0”表示。

int a = 15;
int b = 10;
 a > b//1
 a < b//0
 a < 15//0
 a > 15//0
 a >= 15//1
 a == 15//1
 a == b//0
 a != b//1

5.逻辑运算符和逻辑运算表达式
逻辑运算表达式的值为“真”或者“假”用“1”和“0”表示。
参与运算的对象只要不为0,则运算对象为真。
&&逻辑与运算符:参与运算的对象都为真(不为0),结果才是真。

int a = 15;
int b = 10;
a > b && a < b//0
a > b && a != b//1
a && b//1

||逻辑或运算符:参与运算的对象只要有一个为真(不为0),结果就是真,只有两个都是假的,结果才是假。

int a = 15;
int b = 10;
a > b || a < b//1
  a > b || a != b//1
a < b || a == b//0
a || b//1

!逻辑非运算符:使表达式的值由真变假,由假变真

int a = 15;
int b = 10;
  !(a > b)//0
  !(a < b)//1
  !a//0

6.赋值运算符和赋值运算表达式:
简单赋值运算符:=
 变量 = 表达式;
 a = 45;
复合的赋值运算符: += -= *= /= %=
int a = 15;
a += 10;//a = a + 10;  a = 25;
a -= 10;//a = a - 10;  a = 15;
a *= 2;//a = a*2;  a = 30;
a /= 2;//a = a/2;  a = 15;
a %= 6;//a = a % 6; a = 3;
a++;//相当于a += 1;
a / = 10;//错误,不能有空格

7.逗号运算符和逗号运算表达式:,
表达式1,表达式2,表达式3,...
逗号表达式的最终值是最后一个表达式的值,但是所有的表达式都会运行。
int main(void)
{
    int a = 0;
    int b = 0;
    int c = 0;
    a = 5;
    b = 15;
    c = 10;
    printf("%d\n", (++a, ++b, c++));//10
    printf("%d\n",a);//6
    printf("%d\n", b);//16
}

8.sizeof求字节运算符
  sizeof(表达式) 结果为表达式的数据类型占据的字节数
  int a = 10;
  sizeof(int)//4
  sizeof(unsigned int)//4 
  sizeof(a)//4
  sizeof(165)//4
  sizeof(a + 10)//4
  sizeof(float)//4
  sizeof(double)//8
  sizeof(long double)//8
 
9.强制类型转换运算符:(类型名)(表达式)
int main(void)
{
    float a = 0;
    int b = 0;
    int c = 0;
    float d = 0;
    a = 7.5;
    b = 2;
    d = 1.5;
    c = a * b;//c = 15.000 000 000 000 000;
    printf("%d\n", c);//15
    c = (int)a * b;//c = 7*2; 
    printf("%d\n", c);//14
    c = (int)(a * b);//c = 15;
    printf("%d\n", c);//15
    c = a*b*d;//c = 22.5;  c = 22
    printf("%d\n", c);//22
    c = (int) a*b*d;
    printf("%d\n", c);//21
    c = (int)a*b*(int)d;
    printf("%d\n", c);//14
}

10.不同类型的数据混合运算时为了保证运算的精度,计算机会自动转向精度高的数据类型进行转换  char 一定会转换为int 
 float 一定会转换为double
 char b = 0;
 float c = 0;
 char d = 'M'; 
 b = 'A'+ 32;//b = 65+32;     
 c = 7 / 2.0f;//c = 3.500 000 000 000 000;
//7.000 000 000 000 000 /2.000 000 000 000 000

猜你喜欢

转载自blog.csdn.net/qq_41992378/article/details/82731854