嵌入式学习第三天:C语言的运算符和表达式

今天学习了C语言算数运算符和算术表达式,赋值运算符和赋值表达式以及各类数值型数据间的混合运算

1.基本的算术运算符

加法运算符+,如2+8、+4;
减法运算符-,如5-4、-6;
乘法运算符*,如4*8;
除法运算符/,如3/8;
求余运算符%,%两侧均应为整型或与整型相兼容的类型,如9%4的值为1。

2.算数表达式和运算符的优先级和结合性

 

1b42d8b1940341b8b1af5d3b13a5f923.png

75cbf74e520c4c0797e89710247f9192.png

根据算术运算符的优先级的不同进行运算。

3.强制类型转换运算符(显式转换)

可以利用强制类型转换运算符将一个表达式转换成所需类型,但有可能造成信息丢失。

例如:(double)a                        (将a转换成double类型)

(int)(x+y)                                    (将x+y的值转换成整型)

(float)(8%5)                               (将8%5的值转换成float型)

其一般形式为:(类型名)(表达式)

注意,表达式应该用括号括起来。如果写成(int)x+y,则只将x转换成整型,然后与y相加。

4.自增自减运算符

++i,--i,其作用是使 i 在使用前加1或减1;

i++,i--,其作用是使 i 在使用后加1或减1。

自增和自减运算符只能用于变量,不能用于常量和表达式。

5.左值和右值

左值left value,一般简写为Lvalue,表示运算符左边的变量;

右值right value,一般简写为Rvalue,表示运算符右边的常量。

判断方法:在内存中能定位的是左值,能取地址的是左值,临时变量(匿名变量)是右值,

强制类型转换运算符转换的变量将变成只读变量,是临时变量,如:const int i = 2,此时 i 变成只读变量,不可修改。

6.各类数值型数据间的混合运算

在运算中,不同的数字型数据会有不同的转换(隐式转换)。

0c9c8e45fae9465f98d8f691e718d1be.png

上图中横向向左的箭头表示必定的转换,如字符数据必定先转换为整数,short型转换为int型,float型数据在运算时一律先转换成双精度型,以提高运算精度(即使是两个float型数据相加,也先都化成double型,然后再相加)。
纵向的箭头表示当运算对象为不同类型时转换的方向。例如int型与double型数据进行运算,先将int型的数据转换成double型,然后在两个同类型(double型)数据间进行运算,结果为double型。

7.赋值运算符和赋值表达式

赋值运算符就是“=”,是自右向左的赋值,如:i = j,实际上是把 j 的值赋给 i 。

不同数据类型间的混合赋值,本质为内存拷贝。

double = int,可以进行赋值,如:int = 123,则赋值给double之后为123.000000;

int = double,可以进行赋值,但小数部分会截断,如:double = 123.456,则赋值给int之后为123;

short = int,由于short只有2个字节,int有4个字节,因此int赋值给short时不能全部都给short,只能将int的低位字节赋值给short,因此,int赋值给short时会高位截断;

int = short,由于int有4个字节,short只有2个字节,所以当short赋值给int时,赋给int的低位字节且int仍有2个字节的空位,此时int的两个空字节将根据short的符号来进行不同的变化,如果short为正,则空字节为00 00,如果short为负,则空字节为FF FF,这种方式称为符号位扩展;

unsigned int = int,有符号赋值无符号,则系统会判断高位首字节是否为1或0,为1则为负,将按位取反再加1,获得补码,再给unsigned int赋值,此时unsigned int无符号;

int = unsigned int,无符号赋值有符号,则系统会认为高位首字节为数值而不是符号判断,则int将获得相应的赋值,有符号;

总结:短数据类型向长数据类型赋值为扩展,根据符号来扩展,如果有符号,则空位字节补1,如果没有,则空位字节补0。

8.逗号运算符和逗号表达式

逗号运算符的作用是将两个表达式连接起来,如:1+2,5+8;

逗号表达式称顺序求值表达式,如:a+b,c+d;是从左到右的顺序依次运算

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值