分享

C 05 程序中的顺序点和运算符优先级

 戴维图书馆 2017-08-07
1 程序存在一定顺序点 指的的在执行过程中修改变量值的最晚时刻
  在程序达到顺序点的时候 之前所做的一切操作必须反映到后续的访问中
2顺序点如下:
 ·每个完整表达式结束时
 ·&& || ?:三目运算符  以及逗号表达式;的每个预算对象计算之后
 ·函数调用中对所有实际参数的求值完成之后(进入函数体之前) 即先计算在传入值
  @f(k, k++);    /* 在进入函数前已经计算好了 k k++; 遇到;逗号表达式++生效k++-> k=2 所以 2 ,1 */
  @k = k++ + k++; /* 1. 2+2=4 未到达顺序点 2. 此时遇到;顺序点++计算生效 再计算两个++ 得到6      */
  @if( a-- && a ) /* 这里的顺序点为&& 当预算到&&时--预算 所以为false                      */
4.注释 ///**/建议使用 // 避免一些版本控制软件出现解析问题
1. // this is \ ok heh 加\表示 换行 \为换行符
2. 会在编译过程不是简单删除注释 而是用空格代替
3. ""内的注释无效 编译器认为都是字符串
4. "/*.....*/"不能被嵌套
5. 出色的注释:
  1 准确易懂 防止二义性 错误的注释有害而无利
  2 注释是对代码的提示 避免臃肿
  3 一目了然的代目避免加注释
  4 不要用缩写来注释代码 这样可能会产生误解
  5 注释用于阐述原因不是用于描述程序的运行过程
5.接续符\ 和转义符
1.在连续单词时 反斜杠不能有空格 下一行之前也不能有空格
2.接续符适合在定义宏代码块时用
3.转义符\主要用于表示无回显字符 作为转义符使用时必须出现在字符或者字符串中
6.逻辑运算符 || && !
1.注意||&&的短路运算
  ||有1则为真
  &&有0则为假
  ! c语言中的"!"只认得0 只知道见了0就返回1 因此只要不是0 其运算结果都是0 eg:!100 = 0;
2.三目运算符
(a? b:c) 当a为真时返回b的值 否则返回c的值
7.++ --
1.  int k = (++x, x++, x+10); // k=15 x=3 从左往右计算
2.  int i = 0;
    int j = (++i)+(++i)+(++i);
    /*  j=7 原因是先加前两个括号内的为1+2 再加 4*/
    贪心法读++
    1. 编译器处理的每个字符应该尽可能多的包含字符
    2. 编译器以从左向右的顺序一个一个尽可能多的读入字符
    3. 当即将读入的字符不可能和已读入的字符组成合法符号为止
8.位运算
1.& 按位与0&1 = 0 
  | 按位或0|1= 1
  ^ 按位异或0^0 1^1= 0 相同取0 不同取1 与0异或为A不变
  ~ 取反
 << 左移高位丢弃 低位补0
 >> 右移高位补符号位 低位丢弃 正数符号位为0 eg:8>>3 (1000>>3) = 0001 = 1
2.放错准则
  1. 避免逻辑运算符 位运算符出现在同一表达式中 当出现时尽量用括号()来
  2. 小技巧:
    左移n位相当于*2的n次方
    右移n位相当于/2的n次方
  3.右移x>>2 右端低位移除部分舍弃 左端高位根据符号位补0或者1 无符号或正数补0 负数补1
3.通过异或交换a b的值 表面上看去少使用了一个变量 但是实际上对内存的读写次数提高了 所以效率并不高
  a = a^b;
  b = a^b;
  a = a^b; 
  
9.C语言的隐式转换类型
  1 算术运算式中 低类型转换为高类型
  2 赋值表达式中 表达式的值转换为左边变量的类型
  3 函数调用时 实参转换为形参的类型
  4 函数返回值 return 表达式转换为返回值类型
    char ->shortchar->int
    short->int 
    int ->unsigned int ->long ->unsigned long ->double <- float
江老师的神图: http://www./
 
10.换行
windows \r\n
unix \n
mac \r
11.运算符优先级 来自:http://www./

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多