4.运算符表达式和语句

运算符表达式和语句

1.基本运算符

  • =

    • 数据对象:泛指数据在内存的存储区域
    • 左值:表示可以被更改的数据对象
    • 右值:能赋给左值的量
    #include <stdio.h>
    int main(){
        int x = 10 ;//这个就是正常的赋值,左值指x,右值指10;
        //int 10 = y ;//10无法作为变量,也就是无法成为左值,左值(即变量)需是字母开头。
        			  //右值要能赋值给左值的话,需是数字。
        			  //或者如果是char类型的话,可以用它的常量来赋值,如
        //char x10='y';
        return 0;
    }
    
  • +:加

  • -:减

  • *:乘

  • /:除

    • 在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数。如果除法运算有浮 点数参与运算,系统会将整数数据隐形类型转换为浮点类型,最终得到的结果会是一个浮点数。例如, 2510/1000 属于整数之间相除,会忽略小数部分,得到的结果是 2,而 2.5/10 的实际结果为 0.25。

      例如 3500/1000*1000 //它的结果是3000,因
      
  • %:取余数

    #include <stdio.h>
    int main(){
        int a = 10;//
        printf("%d\n",a+1); //结果 11 ,因为 10 + 1 == 11
        printf("%d\n",a-1); //结果 9  ,因为 10 - 1 == 9
        printf("%d\n",a*2); //结果 20 ,因为 10 * 2 == 20
        printf("%d\n",a/2); //结果 5  ,因为 10 / 2 == 5
        printf("%d\n",a%8); //结果 2  ,因为 10 / 8 == 1 ,还剩 2 没除完
        while(1);//卡屏
        return 0;
    }
    
  • ++:自加1

    • i++先计算表达式的值,然后在++(加一)
    • ++i是先++(加一),在计算表达式的值
  • --:自减1

    #include <stdio.h>
    int main(){
        int a = 10;
        printf("%d\n",a++);//这个的运行结果是10
        printf("%d\n",++a);//这个的运行结果是12
        return 0;
        /*为什么会是这样的?++不是加1么?
        因为printf("%d\n",a++);可以表示为
        printf(“%d\n”,a);
        a = a+1;
        而printf("%d\n",++a);则是
        a = a+1;
        printf("%d\n",a);
        */
        //--可以和++同样的理解。
    }
    

    赋值运算符

    +=:加等于

    -=:减等于

    *=:乘等于

    /=:除等于

    %=:取余等于

    #include <stdio.h>
    int main(){
    	printf("%d\n",a+=5);//赋值运算,结果 15 ,因为 a = 10+5 == 15
        printf("%d\n",a-=5);//赋值运算,结果 10 ,因为前面的a = 15,a = 15-5 == 10
        printf("%d\n",a*=2);//赋值运算,结果 20 ,因为 a = 10 , a = 10*2 == 20
        printf("%d\n",a/=2);//赋值运算,结果 10 ,因为 a = 20 , a = 20/2 == 10
        printf("%d\n",a%=8);//赋值运算,结果 2  ,因为 a = 10 , a = 10/8 == 1 剩 2
     	while(1);
        return 0;   
    }
    
  • 逗号运算符

    int a=2;
    int b=3;
    int c=4;
    int d=5;
    int i=(a=b,c+b);
    //逗号表达式先求逗号左边的值,然后求右边的值,整个语句的值是逗号右边的值
    

    比较运算符

    1、等于: ==
    2、不等于: !=
    3、大于: >
    4、小于: <
    5、大于等于:>=
    6、小于等于:<=

    在c语言中,真用 1 表示,假用 0 表示,

    #include <stdio.h>
    int main(){
        printf("%d\n",10 == 5);
        return 0;
    }//显示结果为0,因为这是10不等于5,所以为假,所以会用0表示
    

    逻辑运算符

    ! 非 !a 如果 a 为假,则!a 为真; 如果 a 为真,则!a 为假

    && 与 a&&b 如果 a 和 b 都为真,则结果为真否则为假

    || 或 a|| b 如果 a 和 b 有一个或以上为真,则结 果为真,二者都为假时,结果为假

    #include <stdio.h>
    int main(){
        int a = 10 ;
        printf("%d\n",!a);
        return 0;
    }//显示结果为0,因为a = 10 是真,加感叹号,变为假,所以显示结果为0
    
    //比较运算符与逻辑运算符的运用
    #include <stdio.h>//逻辑运算符与比较运算符结合
    int main(){//我们做一个分数判定
               //优秀(大于90分),良好(90-75),及格(60分以上),不及格(60分以下)的系统
    	int score = 0;//分数这个变量的命名
    	scanf("%d", &score);//if else 是一个判定语句。
    	if (score >= 90 && score <= 100){//判定优秀的成绩为大于等于90,小于等于100
    		printf("优秀\n");
    	}
    	else if (score < 90 && score >= 75){//判定良好的成绩为小于90,大于等于75
    		printf("良好\n");
    	}
    	else if (score >= 60 && score < 75){//判定及格的成绩为大于等于60,小于等于75
    		printf("及格\n");
    	}
    	else if (score < 60 && score >= 0){//判定不及格的成绩为小于60,大于等于0
    		printf("不及格\n");
    	}
    	else{//其他的情况,比如输入的 -1 啊,或者 100 以上啊。
    		printf("没有这种成绩\n");
    	}
        return 0;
    }//了解即可
    

    位运算符

    位运算符是针对二进制数的每一位进行运算的符号,它是专门针对数字 0 和 1 进行操作的。C 语言中 的位运算符及其范例如下所示

运算符 	  运算 			范例 	        		 结果
& 			按位与          0 & 0                   0
                           0 & 1                   0
                           1 & 1                   1
                           1 & 0                   0
|           按位或          0 | 0                   0
                           0 | 1                   1
                           1 | 1                   1
                           1 | 0                   1
~           取反             ~0                     1
                            ~1                     0
^           按位异或         0 ^ 0                   0
                            0 ^ 1                   1
                            1 ^ 1                   0
                            1 ^ 0                   1
<<          左移           00000010<<2        00001000
                           10010011<<2       01001100
>>          右移           01100010>>2        00011000
                           11100010>>2       11111000 
#include <stdio.h>//按位与
int main(){
    printf("%d\n",10 & 5);
    return 0;
}
/*结果是0,为什么?
看下面的二进制就清楚了
10的二进制是 0000 1010
5的二进制是  0000 0101
与的话是一一对应的,比如第一位是0和1,那么与就是假,就是0;
同理可得其他三位,就都是0。
所以叫 按位与 按二进制的位来逻辑判断*/
printf("%d\n",11 & 9);
//那么上面的结果会是什么呢?
//11: 0000 1011
//9:  0000 0111
//&得  0000 0011
  • 按位与 有一位是0,那一位就是0。

  • 按位或 有一位是1,那一位就是1。

  • ~ 取反 取反操作是将原码取补码,然后01互换,之后再将补码转换成原码输出

#include <stdio.h>//按位与
int main(){
    int a=11;
    printf("%d\n",~a);
    return 0;
}/*11的取反操作:
    原码:0000 1011
	第一位为0,那么根据三码合一,他的补码为 0000 1011
	取反(即01互换而且按照补码的形式存在计算机中):1111 0100
	转换为反码:1000 1011
	转换为原码:1000 1100
	转换成10进制为:-12
	-10的取反操作:
	原码:1000 1010
	第一位为1,那么它的反码为:1111 0101 它的补码为:1111 0110
	取反(即01互换而且按照补码的形式存在计算机中):0000 1001
	符号位为0,那么它的原码也是一样的:0000 1001
	转换成10进制为:9
	*/
  • ^ 按位异或:
#include <stdio.h>
int main(){
	printf("%d\n", 10^7);
    return 0;
}
/*	10:   0000 1010
	7 :   0000 0111
	10^7  0000 1101
	也就是在二进制中,在这一位同为1或0取0,不同取1
*/

左移:<<

右移:>>

#include <stdio.h>
int main(){
int x = 10;
	printf("%d\n", x << 2);//结果是40
	/*10的二进制:
	        0000 1010
	左移后   0010 1000
	*/
    printf("%d\n", x >> 2);//结果是2
    /*10的二进制:
	        0000 1010
	右移后   0000 0010
	*/
    return 0;
}

?:这个是叫三目运算符,与if else类似

#include<stdio.h>
int main(){
int a;//定义分数
    printf("输入你考试的分数\n";
	scanf("%d", &a);//输入分数
	(a >= 60 ? printf("恭喜你!!!\n") : printf("噢,恭喜你获得混合双打套餐!祝你好运\n"));
	//达到60分的输出与没达到60分的输出
    return 0;
}

为什么叫三目因为,(第一段是判断条件)? (判断正确:结果1) : (判断错误:结果2)

运算符优先级

优先级 运算符 结合性
1 ++(后缀),--(后缀),()(调用函数),{}(语句块),.,-> 从左到右
2 ++(前缀),--(前缀),+(前缀),-(前缀),!(前缀),~(前缀),sizeof,*(取指针值),&(取地址),(type)(类型转化) 从右到左
3 *, /, % 从左到右
4 +,- 从左到右
5 << >> 从左到右
6 < > <= >= 从左到右
7 == != 从左到右
8 & 从左到右
9 ^ 从左到右
10 | 从左到右
11 && 从左到右
12 || 从左到右
13 ?:(三目运算符) 从右到左
14 =,*=,%=,+=,-=,<<=,>>=,&=,|=,^= 从右到左
15 ,(逗号运算符) 从左到右
  • 复合语句
    • {}代码块
  • 空语句
    • 只有一个;号的语句就是空语句,空语句在C语言里面和合法的,并且是在某些场合必用的
  • 类型转换
    • 隐式转换
    • 强制转换
posted @ 2020-10-18 23:39  onedust  阅读(360)  评论(0)    收藏  举报