嵌入式学习日记 3

//编程原则:高内聚 低耦合

算数运算符和算术表达式

运算符 表达式:

算术运算
+
-
*
/
%    取余
++    自加
--    自减

运算符
表达式 由 运算符 和 运算数 构成的 字符序列
1+2 //所有的表达式都是有结果的(值)
    //表达式一定是有数据类型的
隐式类型转换:
    double        <-- float
    ^
    |
    long        
    ^
    |
    unsigned    
    ^
    |
    int            <-- char/short
    
    规则:
        从右向左:必转
        从下向上:由低精度向高精度转换    //低精度直接转为目标高精度 不需要经过中间值
        
    表达式怎么看?
    1.有哪些运算符?
    2.运算符的
        优先级?    //查表(运算符和结合性)
        结合性?    //查看要求运算对象的个数
除法
        注意:    1.除数不能为0
                2.整型数相除 --- 相当于整除
                
强制类型转换
    (类型)表达式    eg:(double)a/b //强制类型转换仅在本行生效
    123.456
    番外:linux下的两类错误:
            1.编译时的问题
                错误 --- 语法错误    //error
                警告 --- 语法不合适    //warning
            2.运行时的问题
                逻辑问题 --- 调整思维
取余
    注意
        1.浮点型不能做求余运算
        2.求余运算第二个操作数不能是0
        3.有符号数求余运算结果的 符号 只取决于 左操作数 的符号
    求余算法的作用
    a.判断奇数偶数
     a%2 == ?
    b.随机出题
     a%N 结果 [0~N-1]
        随机出十道题?
        随机数的产生
            工具:
                函数
                随机数产生的函数
                伪 <---> 假
                int rand(void);        
                srand(int seed);    
                time(NULL);
++    //自加
--    //自减
    参与另一种运算才可讨论“先加后用”或“先用后加”
i++    //先用(表达式的结果)后加(i)
++i    //先加后用

i++    //表达式的结果?

i++    需要开一片内存储存结果再给i赋值
++i    直接加,后用结果 效率比i++高(不需要独立开空间存储)

注意:
    1.浮点数也能自增自减
    2.++ -- 运算数 必须是左值(变量)
    3.运算数必须不为只读变量
    4.注意尽量避免
        printf("%d%d\n",i,++i);
        这种不确定的代码
     左值(lvalue -- locationable):能被定位到地址的变量
     表达式与匿名变量都是右值
     “贪心原则” :从左到右逐个字符的扫描表达式,看这些字符能否尽可能多的结合成c的运算符不能结合,就还是字符本身
     
赋值运算:
 =
赋值运算表达式的结果,就是左值获得的值
int a;
a = 10; 
(a = (b = (c = 1)))
a += 1 // a = ( a + 1 )
逗号运算:顺序求值运算符
形式:
 表达式1,表达式2,...,表达式n;
 逗号表达式的结果是最后一个式子的结果
 
 
 总结:
 1.数据类型
 整型
 浮点型
 字符型
 
 a.常量
 b.变量
 c.长度
 d.考点
 2.运算符 & 表达式
 隐式类型转换
 强制类型转换
 
 运算
 算术>赋值>逗号
 +-*
 /
 %
 ++
 --
 

你可能感兴趣的:(学习)