[关闭]
@Mahdi 2017-07-03T21:00:22.000000Z 字数 1934 阅读 1024

C语言


文字篇

  • C语言只能操作内存,不能操作寄存器。汇编语言既能操作寄存器。
  • (int*)可以将常量转换成非常量。
  • 加减乘除会产生数据越界,最安全的做法是异或。
  • C语言区分大小,汇编语言不区分大小写。
  • 一个二进制数按位取反并加一就可以得到它的负数的补码,也就是说:x的负数-x = ~x+1
  • break跳出当前整个循环语句,而continue跳过当前循环的某一个条件语句的动作,return跳出当前函数返回函数调用处(顺便返回函数执行结果)。

C语言

ifelse

else不能单独成为一条语句,它只能是if语句的一部分,不能单独出现在程序中,必须与if配对,共同组成 if ... else 语句。
应当注意的是 else 总是与它上面的最近的
还没有与else配对的if配对

  1. #include <stdio.h>
  2. int main(int argc, char *argv[])
  3. {
  4. int x = 1, y = 2, z = 3;
  5. if(x < y)
  6. if(y < z)//这个if与下面一个else配对,并构成了上面这个if的内嵌语句,实际上应加上 {} 便于区分 ,如下
  7. printf("++z:%d\n",++z);
  8. else
  9. printf("++y:%d\n",++y);
  10. printf("x++:%d\n",x++); //这两个printf语句不受上面的任何if的限制
  11. printf("++x:%d\n",++x); //注意++x 与x++ 的运行结果区别
  12. return 0;
  13. }
  14. int main0(int argc, char *argv[])
  15. {
  16. int x = 1, y = 2, z = 3;
  17. if(x < y)
  18. {
  19. if(y < z) //实际上应加上 {} 便于区分
  20. printf("++z:%d\n",++z);
  21. else
  22. printf("++y:%d\n",++y);
  23. }
  24. printf("x++:%d\n",x++); //这两个printf语句不受上面的任何if的限制
  25. printf("++x:%d\n",++x);
  26. return 0;
  27. }
  28. /*
  29. 运行结果:
  30. ++z:4
  31. x++:1
  32. ++x:3
  33. P.S.
  34. 仔细分析结果
  35. */

逻辑运算符

优先级大于 算数运算符 大于 关系运算符 大于 && 大于 || 大于 赋值运算符 结合性:自左向右
操作对象: 逻辑运算符的操作对象与关系运算符相同,可以是一个值或任何合法的表达式,构成逻辑表达式。逻辑表达式的结果只能是一个布尔值--- 10
C语言中
0-->
非零 -->

eg:

a = 5;
!a的值是 0;

逻辑表达式具有短路性
eg:

int x = 1, y = 2, c = 3, d = 4, m = 1, n = 1;
(m = x > y) && (n = c > d)表达式的值是 0;运行后m = 0; n的值仍为原值 5;

原因:

 x > y 的值w为 0 因此 m = 0, 而不再执行 n = c > d

关系运算符和关系表达式

<
>
<=
>=

==
!=

关系运算符的优先级低于算术运算符高于赋值运算符
前4种优先级相同
后两种优先级相同
前四种优先级大于后两种
结合性自左向右

关系运算符的结果是一个整数值--- 10
关系运算符两边的类型不一致时,系统自动向高级类型转换,然后进行比较

  1. #include <stdio.h>
  2. int main(int argc, char *argv[])
  3. {
  4. int a = 5, b = 4, c = 3, d = 2;
  5. if(a > b > c)
  6. /*
  7. if (a > b > c)是合法的表达式但与if(a > b && b > c) 并不等价 不要受数学表达式的影响
  8. 原因在于:
  9. 表达式a > b > c会依次从左到右进行计算,
  10. 即相当于(a > b) > c
  11. 先计算a > b,
  12. 如果成立,会返回1, 否则会返回0;
  13. 之后再比较
  14. 1 > c或者 0 > c
  15. 这样就导致和你想要的结果不同
  16. 在这里 a > b 返回 1
  17. 1 > c 返回 0
  18. 所以原式为 if(0)
  19. 所以 printf("d:%d\n",d); 不会被执行
  20. */
  21. printf("d:%d\n",d);
  22. else if((c - 1 >= d) == 1)
  23. printf("d+1:%d\n",d + 1);
  24. else
  25. printf("d+2:%d\n",d+2);
  26. return 0;
  27. }
  28. /*
  29. 运行结果:
  30. d+1:3
  31. */

  1. #include<stdio.h>
  2. int main(){
  3. int x = 2, y, i = 0, j = 0;
  4. int temp, a, b, c, d, e;
  5. a = b = c = x; //多重赋值是正确的赋值方式,但 不能出现在变量的定义中 eg: int a = b = c = 5; 为错误赋值。
  6. /*
  7. d = 5 = 4 + 1; 这是错误的赋值方式 5是常量
  8. 赋值运算符左侧的操作数必须是一个变量,
  9. 右侧可以是合法的表达式或常量
  10. */
  11. y = (i++, ++j, x + 3, x + 5);
  12. printf("y = %d\n",y);
  13. printf("i = %d\n",i);
  14. printf("j = %d\n",j);
  15. printf("a = %d\n",a);
  16. printf("b = %d\n",b);
  17. printf("c = %d\n",c);
  18. return 0;
  19. }
  20. /*
  21. 运行结果:
  22. y = 7
  23. i = 1
  24. j = 1
  25. a = 2
  26. b = 2
  27. c = 2
  28. */

LOL

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注