@Mahdi
2017-07-03T13:00:22.000000Z
字数 1934
阅读 1211
- C语言只能操作内存,不能操作寄存器。汇编语言既能操作寄存器。
- (int*)可以将常量转换成非常量。
- 加减乘除会产生数据越界,最安全的做法是异或。
- C语言区分大小,汇编语言不区分大小写。
- 一个二进制数按位取反并加一就可以得到它的负数的补码,也就是说:x的负数-x = ~x+1
- break跳出当前整个循环语句,而continue跳过当前循环的某一个条件语句的动作,return跳出当前函数返回函数调用处(顺便返回函数执行结果)。
C语言
else不能单独成为一条语句,它只能是if语句的一部分,不能单独出现在程序中,必须与if配对,共同组成 if ... else 语句。
应当注意的是 else 总是与它上面的最近的
还没有与else配对的if配对
#include <stdio.h>int main(int argc, char *argv[]){int x = 1, y = 2, z = 3;if(x < y)if(y < z)//这个if与下面一个else配对,并构成了上面这个if的内嵌语句,实际上应加上 {} 便于区分 ,如下printf("++z:%d\n",++z);elseprintf("++y:%d\n",++y);printf("x++:%d\n",x++); //这两个printf语句不受上面的任何if的限制printf("++x:%d\n",++x); //注意++x 与x++ 的运行结果区别return 0;}int main0(int argc, char *argv[]){int x = 1, y = 2, z = 3;if(x < y){if(y < z) //实际上应加上 {} 便于区分printf("++z:%d\n",++z);elseprintf("++y:%d\n",++y);}printf("x++:%d\n",x++); //这两个printf语句不受上面的任何if的限制printf("++x:%d\n",++x);return 0;}/*运行结果:++z:4x++:1++x:3P.S.仔细分析结果*/
优先级:
!大于算数运算符大于关系运算符大于&&大于||大于赋值运算符结合性:自左向右
操作对象: 逻辑运算符的操作对象与关系运算符相同,可以是一个值或任何合法的表达式,构成逻辑表达式。逻辑表达式的结果只能是一个布尔值---1或0
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种优先级相同
后两种优先级相同
前四种优先级大于后两种
结合性:自左向右关系运算符的结果是一个整数值---
1或0
关系运算符两边的类型不一致时,系统自动向高级类型转换,然后进行比较
#include <stdio.h>int main(int argc, char *argv[]){int a = 5, b = 4, c = 3, d = 2;if(a > b > c)/*if (a > b > c)是合法的表达式但与if(a > b && b > c) 并不等价 不要受数学表达式的影响原因在于:表达式a > b > c会依次从左到右进行计算,即相当于(a > b) > c先计算a > b,如果成立,会返回1, 否则会返回0;之后再比较1 > c或者 0 > c这样就导致和你想要的结果不同在这里 a > b 返回 11 > c 返回 0所以原式为 if(0)所以 printf("d:%d\n",d); 不会被执行*/printf("d:%d\n",d);else if((c - 1 >= d) == 1)printf("d+1:%d\n",d + 1);elseprintf("d+2:%d\n",d+2);return 0;}/*运行结果:d+1:3*/
#include<stdio.h>int main(){int x = 2, y, i = 0, j = 0;int temp, a, b, c, d, e;a = b = c = x; //多重赋值是正确的赋值方式,但 不能出现在变量的定义中 eg: int a = b = c = 5; 为错误赋值。/*d = 5 = 4 + 1; 这是错误的赋值方式 5是常量赋值运算符左侧的操作数必须是一个变量,右侧可以是合法的表达式或常量*/y = (i++, ++j, x + 3, x + 5);printf("y = %d\n",y);printf("i = %d\n",i);printf("j = %d\n",j);printf("a = %d\n",a);printf("b = %d\n",b);printf("c = %d\n",c);return 0;}/*运行结果:y = 7i = 1j = 1a = 2b = 2c = 2*/
