算术运算符和算术表达式,赋值运算符和赋值表达式以及逗号运算符和逗号表达式
一、变量赋初值
变量赋初值就是在为变量开辟空间时为其进行初始化的操作称之为变量赋初值。
变量赋虽然比较简单理解,但有许多人不清楚变量赋初值与变量赋值有什么区别,虽然都是使用“=”完成的,但二者并不是相同的。
在定义 i 这个标识符的时候给他内存空间存入10,即是对i完成初始化。接下来对 i 进行赋值是将
i 内部的初始内容10替换成15。这就是这两者的区别。
二、各类运算符和表达式
1.算术运算符和算术表达式
(1)算术运算符(看例图)结合方式是从左至右
*(乘),/(求商),%(求余)三类运算符优先级高于+,-。在运行过程中优先进行前三类的操作。
(2)算术表达式:是单纯由算术运算符所构成的表达式。
在算术表达式中/和%这两类组成的表达式是比较特殊的,这俩类组成的表达式右操作数不能为0,如果是0程序直接从此表达式中断(程序崩溃)。%组成的表达式的输出结果与左操作数有关,若左操作数为正数则输出正数反之输出负数,但是输出结果大小一定是小于右操作数的且左右操作数只能为整型或与整型兼容的类型才可。
2.赋值运算符和赋值表达式
(1)赋值运算符(看例图)结合方式是从右至左
(2)赋值表达式:是由赋值运算符所构成的表达式。
3.逗号运算符和逗号表达式
(1)逗号运算符(“ , ”)结合方式是从左至右
“ , ”在函数调用时使用是作为分隔符使用的,在语句中就是在其余运算符运算结束后顺序进行操作。
(2)逗号表达式
4.自增,自减运算符
由于自增(‘ ++ ’)与自减(‘ -- ’)类似在这里就只讨论自增运算符
(1)定义变量i,然后++i
作用:若输出++i,则i本身立即加1然后输出加一后的处理结果,因为++i是仅对i的存储单元进行操作,表达式虽然是++i但实际上还是输出的是i这个变量。
(2)定义变量i,然后i++,则会输出i的值没有输出加一后的结果,因为i++是先把i的内容进行拷贝然后建立一个匿名变量(临时变量),然后对i进行加一操作,与++i不同的是i++输出的是这个临时变量的内容而不是i的内容。
5.左值(lvalue)和右值(rvaule)
(1)左值:可被定位的量(有地址)变量一般都可以充当左值,若想判断是否为左值可以使用“&”进行操作看能否得到其地址。
(2)右值:不可被定位的量(没有地址)临时变量均为右值还有常量。右值不能进行自增自减操作。
例: const int i =2;//令i的内容固定为2
虽然说i的内容不变了但其本身还是左值,还是有存储空间给他并且地址是可以定位的。
三、random函数的了解
1. long int random (void) 随机数生成器
类型 函数名 形参
2.用法: random (实参)但由于random函数形参为虚无所以此处实参可以不用写。
三、不同数值型数据间的混合运算混合赋值
1.不同数值型数据间的混合运算
隐式转换:
在编写代码过程中float型和char,short型系统默认会将其分别转化为double型和int型,若在运算表达式中出现高级数据类型其余低数据类型会向高级数据类型自动转换的模式称为隐式转换。
显式转换:利用“ (类型) ”运算符 进行强制转换
用法:(类型名)+变量/常量 → 指定类型名的变量/常量。
2.不同数值型数据间的混合赋值
double = int | 整数部分不变就在后面加上小数点和若干0 |
int = double | 会发生小数截断,小数部分丢失,保留整数 |
int = short | 会产生符号位扩展,若短整型为正数则高位补0反之补1 |
short = int | 会发生高位截断,高位数值丢失,保留低位数值 |
int = unsigned short | 会产生符号位扩展,高位补0 |
unsigned int = int | 不发生变化存储空间内的数据一致 |