@Mahdi
2017-07-03T21:00:22.000000Z
字数 1934
阅读 1052
- 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);
else
printf("++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);
else
printf("++y:%d\n",++y);
}
printf("x++:%d\n",x++); //这两个printf语句不受上面的任何if的限制
printf("++x:%d\n",++x);
return 0;
}
/*
运行结果:
++z:4
x++:1
++x:3
P.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 返回 1
1 > 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);
else
printf("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 = 7
i = 1
j = 1
a = 2
b = 2
c = 2
*/