C语言基础之运算符

一、算术运算

(1)运算符:+(加),-(减),*(乘),/(除),%(求余),++(自加),--(自减)
        a.优先级 ------ 混合运算时,高优先级先结合
        b.结合性 ------ 混合计算时,同一优先级按照结合性结合,比如作加减运算时,从左往右
        c.注意运算的对象的个数
注意:
        做除法运算时,①两个整型数相除,相当于整除 ②除数不能为0 (数学逻辑上出错)
        做求余运算时,①除数不能为0 ②运算数必须是整数 ③结果符号取决于左操作数
        取余数应用:① 判断奇数偶数 ② 做%N的运算时,取值范围是 0 ~ N-1
拓展:
如何产生一个随机数?------ 时间是改变的,获取时间作为种子数
        int rand(); ------ 伪随机,种子是固定的,
        void srand(unsinged int seed); ------ 可以自己提供一个种子,但产生的随机数序列是固定的
        time_t time(time_t  *tloc); ------ 时间秒数
        time (NULL);------ 返回值就是获得的秒数值
eg:从100道题中随机抽取10道题
        
 

(2)表达式:运算符和运算数构成的字符序列,表达式都是有值的,有类型的

a.隐式类型转换规则(自动完成):
        

从右到左 ------- 必转
从下到上 ------- 低精度与高精度运算时,低精度要转高精度。
注:这个过程不是逐级转换的,比如 int * double,int直接转成double

b.强制类型转换(手动完成):
        格式:(类型)运算数
        注:强制类型转换的本质是运算符,数本身不受影响。
c.    a++  与  ++a
        a++ ------ 后置加加 ------ 先用(表达式的结果)后加(让i自增)
        ++a ------ 前置加加 ------ 先加后用
注意:
        ① a++ ++a如果单独使用,效果上没有区别
        ② 先用后加 或 先加后用,是参与到别的运算中时,才发挥作用
        ③运算数,必须是一个可修改变量 
        ④浮点类型也可以自增自减
问题:int  i = 0;i++;在计算机中过程是怎样的?
        ①int i = 0;在内存中开辟一块4个字节的空间,用来存放 i 的值0;
        ②i++ 是先用后加,此时内存中临时开辟了一块空间,来存储 i++ 这个表达式的结果0
        ③最后 i 的空间中原来存的0更新为1
而对于 ++i 来说,是先加后用,i 的空间的值直接从0更新为1,不用临时开辟空间存表达式的值。因此,++i 比 i++ 效率更高

补充:
        左值  ------ 可定位的 ------ 通常是变量
        右值  ------ 不可定位 ------ 常量,表达式
        注:const int a = 10;------ constant -----常量
                                           ------ a其实还是个变量,但是这个变量只读,不能修改
eg:int i = 0;
        printf("i = %d\n", i+++++i);     ------- 会报错
补充:贪心法 ---- 从左到右逐个扫描,将字符尽可能多地结合成C语言运算符
        i++  ++  +  i   ------  ((i++)++)+ i
分析:按照运算规则,第一个i++先算,它是一个表达式,是右值;然而第二个++运算时,需要一个左值,因此会报错。

二、赋值运算

(1)  “ = ” ------ 将一个数赋值给一个变量 
        int a;
        a = 10; //赋值运算,赋值表达式,结果就是a的值 ,类型就是a的类型 
        注:a=(b=(c=10))  //可以连续赋值 

        += //赋值运算 
        a += 1   ------  a = (a + 1)  ----- /=,%=,-=,*= 也类似


(2)不同类型间的混合赋值:
        ①高进度 => 低精度 
        double/float => 整型  ==> 精度丢失 
        ②低精度 => 高精度  
        ③长类型=>短类型   //高位截断 
        ④ 短类型=>长类型
                 无符号短类型 =>长类型  ------ 高位补0
                 有符号短类型 =>长类型  ------ 符号位扩展 (高位补满符号位,1补1,0补0)

三、逗号运算(优先级最低)

(1)语法:表达式1,表达式2,表达式3,...... 表达式n
(2)运算过程:从左到右,挨个运算
(3)运算结果:是整个式子中最后一个表达式的结果

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值