2.运算符与表达式

  1. 运算符

    什么是运算符?
    用来进行运算的符号。

    如:
    + - * / % …

    a、几目运算符? 该运算符需要几个操作数。
    单目运算符 :该运算符需要1个操作数. 如: ++ –
    双目运算符 :该运算符需要2个操作数
    三目运算符 :该运算符需要3个操作数 如: ? :

    b、结合性 : 决定先算谁后算谁的问题
    从左至右的结合性 , 从右至左的结合性

     如: 
     	+ 结合性 : 从左至右结合 
     		a + b 
     			先算表达式a的值,再算表达式b的值 ,
     			最后把 a+b 
     			
     		so,在C语言中: 
     			a + b 与  b + a 的含义一样?
     			不一样
     			例子: 
     				i = 5, j = 6;
     				
     				(i++) + (i+j) == 17?
     				(i+j) + (i++) == 16 ? 
    

    c、优先级 : 在一个含有多个运算符的表达式中,先算哪一个运算符。

     单目运算符 > 算术运算符 > 关系运算符 > 逻辑运算符 
     	> 条件运算符  >  赋值运算符  > 逗号运算符
    

    (1) 算术运算符: 进行算数运算的运算符。

     ++  -- :单目运算符 
     + - * / %  : 双目运算符 ,结合性从左至右。
     
     	例子: 
     		3 + 5 == ?  8
     		5 / 4 == ?  1 (整数进行算数运算结果为整数)
     		5.0 / 4 == ? 1.25 (结果向高精度转换) 
     		
     			typeof(5/4) == ? int 
     			typeof(5.0/4) == ? double 
     			
     		3 / 2 == ? 1
     		(double)(3 / 2) == ? 1.0
     		(double) 3 / 2  == ? 1.5
     		
     		
     	问题: 用C语言的表达式方式来描述数学里面的式子。 
     	
     		a / b 
     				描述: 
     					(double)a/b
     					1.0 * a / b
     					
     					
     	% : 求余,取模。 
     		要求两个操作数必须为整数。
     	
     		5 % 4 == ? 1
     		5 % 4.0 == ? ERROR
     		5.0 % 4 == ? ERROR
     		4 % 5 == ? 4
     					
     		
     		
     		
     	++ : 自增运算符
     		i++
     		++i
     	
     	-- : 自减运算符 
     		i-- 
     		--i
     		
     		++ -- :单目运算符,要求操作数必须为一个 "左值"
     			左值: lvalue  可写的地址
     			
     			例子: 
     				int a = 1024; 
     				5++ ERROR
     				(a+b)++ ERROR
     				(a++)++ ERROR
     				a++  OBJK
     				
     			     表达式的值      做完表达式之后i的值
     				 
     		i++ 		i 						i = i + 1
    
     		++i 		i + 1       		  i = i + 1
    
     		i--       	 i						i = i - 1
    
     		--i 		i - 1       		   i = i - 1
     		
     			例子: 
     				
     				i = 5; 
     				a = i++; 
     				printf("i == %d\n", i); //6
     				printf("a == %d\n", a); //5
     				
     				i = 5; 
     				a = ++i; 
     				printf("i == %d\n", i); //6
     				printf("a == %d\n", a); //6
     				
     				i = 5; 
     				a = i--; 
     				printf("i == %d\n", i); //4
     				printf("a == %d\n", a); //5
     				
     				i = 5; 
     				a = --i; 
     				printf("i == %d\n", i); //4
     				printf("a == %d\n", a); //4
     				
     				
     				i = 5;
     				(i++) + (i++) + (i++)
     				
     				拒绝做此类题目,因为这种题目没有任何意义!
    

    (2) 关系运算符 : 用来判断两个东东关系的运算符。
    “关系” : 数值大小关系

     >  <  >=  <= 
     ==  !=
     		
     双目运算符,结合性从左至右。
    
     关系表达式;用关系运算符连接起来的式子。
     
     关系表达式的值 : 
     	关系成立  1
     	关系不成立   0
     	
     	例子: 
     		5 > 4   =>  1
     		3 <= 2  =>  0
     		
     		5 > 4 > 3   => 
     			这是一个合法的表达式。
     			<=> (5 > 4) > 3 
     			<=> 5 > 4  => 1
     				1 > 3  => 0
     				
     		so,在C语言中 , 5 > 4 > 3 这个表达式的含义和数学上的含义 
     			是不一样的。
     			
     			在C语言中, 5 > 4 > 3 是拿表达式(5 > 4)的值 与 3 
     			进行PK.
     			
     			在数学上的含义: 5 > 4  并且  4 > 3
     				如何描述数学上的含义? 
    

    (3) 逻辑运算符 : 用来描述逻辑关系的运算符。

     !   逻辑非   单目运算符    “取反” 
     	真变假 假变真 
     	
     && 	逻辑与	 双目运算符    “并且”  从左至右结合性 
     	只要有一个操作数为假,那么值就为假
     	
     ||  逻辑或   双目运算符    “或者”  从左至右结合性
     	只要有一个操作数为真,那么值就为真
     
     逻辑表达式 : 逻辑运算符连接起来的式子。
     
     逻辑表达式的值: 
     	逻辑真 (非0 ,1)
     	逻辑假 ( 0 )
     	
     	例子: 
     		a = 4 , b = 5 
     		a && b  => 1
     		a && 0  => 0
     		a || 0  => 1
     		
     		!a || b => 1 
     		
     		a && 0 || 2  => 1 
     		
     		5 > 3  &&  8 < 4 - !0   => 0
    

    练习:
    int a, b , c , d , m ,n;
    a = 1;
    b = 2;
    c = 3;
    d = 4;
    m = 1;
    n = 1;
    (m = a > b) && (n = c > d);
    printf("%d %d %d %d %d %d\n", a,b, c, d, m , n);

#include <stdio.h>

int main()
{
   
	int a, b , c , d , m ,n;
	a = 1;
	b = 2; 
	c = 3; 
	d = 4;
	m = 1;
	n = 1;
	(m = a > b) && (n = c > d);
	printf("%d %d %d %d %d %d\n", a,b, c, d, m , n); // 1 2 3 4 0 1

}
		C语言的运算符的惰性运算: 
			
			(1) a && b && c 
				只有a为真时,才需要去判断b的值
				只有a和b都为真的时候,才需要去判断c的值。
			
			
			(2) a || b || c 
				只要a为真,就不需要判断b和 c的值 
				只有a为假时,才需要去判断b的值
				只有a和b都为假的时候,才需
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaowuguiya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值