变量赋初值
1.赋初值:初始化,在变量开辟地址空间时赋初值
如:
int i = 8;
2.赋值:先开辟地址空间,后对变量赋值
如:
int a ;
a = 8;
进行赋值时,初始化比赋值效率高
运算符
常见运算符
注意:
1.优先级 :优先级高的先进行运算
2.结合方向: 运算级同级时,按照结合方向运算
3.单目运算符:只需一个操作数
双目运算符:需要两个操作数
三目运算符: 三个操作数
优先级:单目运算符>双目运算符>三目运算符
除法 (任何数据都有数据类型)
eg:float/float结果为
编译器只做类型检查,若除数为0,编译器无法检测,将编译成功,后程序崩溃
eg:
求余(/)
求余运算符要求两个操作数必须为整型或与整型相兼容的类型,若不相同或兼容,则:
求余表达式结果与左侧操作数有关 结果一定小于右操作数
新学习到的函数:随机数生成器 函数
long int (返回类型)random(函数名)(标识符)(void)虚空的:(形参)
形参与实参必须个数相等 类型匹配
自加运算和自减运算
1.以自加运算为例:
++i 先加后用 底层原理:表达式与i都加了
i++ 先用后加 先拷贝表达式为临时变量 表达式没加 i 加了
如下:i=2时,进行i++操作,程序将先拷贝i的值存储在另外一个地址,后对i进行+1操作
此处开辟出一个变量为匿名变量
若单纯加减 ++i效率高
i--和--i与i++ ++i相同
2.注意:同一表达式,不要对变量反复++
3.左值右值
左值:赋值运算符左边(变量 )
右边:赋值运算符右边(常量)
判断左右值方法:可以取地址的为左值,不能取地址的为右值。(所有匿名变量均为右值)
4.允许对变量定义时 加const i变成只读变量 不可改变取值(但依旧为左值)可取地址
eg:
临时变量( 匿名变量 )
则 i+ j 为临时变量 临时变量与表达式数据类型一致
各类数值型数据间的混合运算
1.隐式转换:有级别差时,由低级别转为高级别
如short 、float将自动转为 int、 double
例:
由于unsigned级别高于int,所以先将i的类型转换为 unsigned,因unsigned 均>0,所以输出结果将为 No
2.显式转换:强制类型转换运算符 (有可能会带来数据信息丢失)
eg:
不同数据类型之间的混合赋值
1. double=int (double本身又有整数又有小数),不会报错
2. int =double 会发生小数部分截断 只保留整数
3. short= int (长数据类型向短数据类型赋值时 去掉高位字节位 保留地位字节位)为高位截断
4.int=short (符号位扩展) 正数补0 负数补1
int i= unsigned short
总结: 短向长赋值时 signed补符号位(0正1负 unsigned补0)
5.unsigned int = int 若内存空间一样大 可直接拷贝
逗号表达式
顺序求值运算符
若
则输出结果为5
函数调用表达式中的逗号,不是逗号运算符,是形参的分隔符.