C语言(2)运算符

一.算数运算符

算数运算符的分类:

对于  “ / ” 
    (1).如果是两个整型数相除,此时相当于是整除的效果 
    (2).除法运算中 除数不能为 0

对于 “ % ”

    (1).除数不能为0
    (2).求余运算,运算数不能是小数。必须是整数
    (3).结果的符号 ,取决于 左操作数 的符号

对于 “ ++ ”  自增  --- 表示一次增加1  (“ -- ”用法相似)
    int a = 1;
    a++   //后置加加  --- 先用(表达式的结果) 后加(让i自增)
    ++a   //前置加加  --- 先加(让i自增) 后用(表达式的结果) 

二.赋值运算

1.优先级和结合性

优先级 --- 不同优先级的运算 混合运算时,高优先级的先结合 
结合性 --- 同一优先级的运算 混合运算时,按照结合性进行结合。

如a=c-d*e/f 有三个运算符 “ - ” ,“ * ”,“ / ”因为“ * ”与“ / ”优先级高于“ - ”所以先算d*e/f,又因为“ * ”与“ / ”优先级相同,则按照结合方向从左至右。

2. 隐式类型转换与强制类型转

隐式类型转换

在多种类型的数据进行运算时,输出值只能有一个数据类型。

int a = 8;

printf("%f", a * 1.2);;

如果输出则会发现输出变为了double类型的值9.2(即便一开始声明是int类型),因为默认1.0为double类型,低精度向高精度转换,故得到的是一个double类型。详细看下图

其中进行运算时向左的箭头是必定转化的。如char数据必定会转换成int类型。

注意:

当unsigned short 向int转换时

如0x18 12;变为int类型则为0x18 12

而当signed short向int转换时

如0x18 12;变为int类型为0x1812

而负数0xf8 12;变为int类型为0xff ff f8 12

 强制类型转换

还是上述例子

int a = 8;

printf("%f", a * 1.2);

我们将其改为

int a = 8;

printf("%d",(int)( a * 1.2));

(int)表示强制转换为int类型输出的值就会强行变为整型即9而非9.2。

总结

  高精度 => 低精度    --- 精度丢失 
   长类型 => 短类型   --- 高位截断 
   短类型 => 长类型   --- 短类型是否有符号  
                    无符号   --- 补0
                    有符号   --- 符号位扩展 

三 “  ,”号运算

逗号运算(顺序求值运算符):

“ , ”    优先级最低
 
语法:
  表达式1,表达式2,表达式3, ...,表达式n 
  
逗号运算的过程:

a=(1+2,a++,3+4) //从左到右,挨个运算 
                               //逗号运算表达式的结果 --- 是整个式子中最后一个表达式运算的结果

上式a = 7。 

说明:文章图片取自C语言程序设计(第三版)---谭浩强

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值