回顾:以int为例 有符号型 -2^31---+2^31-1
无符号 0---+2^32-1
为什么阶码要加127:(1)避免阶数为负
(2)2^7-1(例如:1.34),与小数点前的数有关
初始化 int i = 10;与赋值int i; i= 10;
运算符(operator)优先级:操作数(operand)
C语言中所有运算符都有对应的数据类型。
编译器只做类型检查(gcc),只检查数据类型不检查具体的数。
求余运算符,要求两边必须是整型或者与整型相兼容
求余运算符最终的结果的符号只与左操作数有关
求余运算符除不尽时;所取值为0---右操作数-1
随机数(random)
void形参random实参
编译时改变的是临时变量 匿名变量
自增运算符i++,与++i 的区别
(1)i++会引入一个临时变量,++i直接运算
(2)++i效率更高
左值 left value 只能放在赋值运算符左边的值
右值 right value 一般是常量,只能放在赋值运算符的右边,临时变量都是右值(不能被赋值)
? ++i++运算为什么出错() ?
(1)++运算符是从右到左计算的 ,可以理解为++i---++.
(2) ++i为右值即为rvalue,不能再赋值给++,故运行会报错。
判断左右值的方法
(1)能够被定位的(ip &)都是左值,不能被定位的是右值
(2) 所有的临时变量都是右值
(引入一个“只读变量”为左值(lvalue))
const关键字 作用将变量设置为只读变量,限制变量被编译过程中被更改
复合数据计算
隐式转换 不同数据类型之间 低级数据会向高级数据转化
显式转换 类型转换运算符()将一个数据临时转换为所需的数据类型(注意:可能导致某些数据的丢失)
混合赋值(有符号位看符号位补,无符号位统一补0)
低级不能向高级赋值
高位向低位赋值(高位截断) short = int
低位数据向高位数据补时(短数据向高数据补时,剩余位数当短数据为正时补0,为负时取1);补码转原码-1取反,原码转补码取反再+1。
当int 向 unsigned 赋值时由于两个都是4字节,但是int表示整型参数有符号,unsigned表示整型参数无符号当二者相赋值时,%d表示有符号,%u表示无符号
无符号计算:FF FF FF FF(识别为原码) =2^32-1= 4294967295
有符号计算为:FF FF FF FF (识别为补码) 故计算为 补码-1再取反得原码00 00 00 01,又因为补码确定了数的符号1为负,故得-1.
函数传参