-
++(自增运算符)和 --(自减运算符)的区别
<1>.若++在变量前 ,则先加后用,++在变量后则先用后加
int i =1;
printf("%d",i++); 输出为1
printf("%d",++i); 输出为2
<2>.若--在变量前 则先减后用,--在变量后则先用后减
int i =1;
printf("%d",i--); 输出为1
printf("%d",--i); 输出为0
2. a>b>c表达式的运算
#include <stdio.h>
void main() {
int a=5,b=4,c=3,d=2;
if(a>b>c)
printf(“%d\n”,d);
else if((c-1>=d)==1)
printf(“%d\n”,d+1);
else
printf(“%d\n”,d+2);
输出结果为3 ,先判断a>b的值为真 则a>b的值为1,判断1>c 显然为假 值为0
3. !x 等价于 x==0的理解
<1>.可以这样理解 ,布尔类型(bool)的值0为假,非零为真
<2.>!运算符为逻辑运算符中的取反运算符,真变假,假变真
<3>.不妨让x = 0,则!x相当于!0,其值为真,而x==0相当于 0==0(做判断),其值为真,很好理解
4. && 和 || 的截断运算
<1>.&&为与运算符 (有假则截断为假,不在执行后面的表达式)
int i =0;
int y=2;
int z;
z = x++ && ++y;
printf("x = %d,y=%d,z = %d",x,y,z);
输出为x=1,y = 1,z =0;
由于x++先用后加,加完之后为x=1,用时x=0,&&左边表达式为假,则不再执行右边的表达式,则y= 1,z=0;
<2>. ||为或表达式(若左边表达式为真,则不再执行右边的表达式,表达式为真)
int i =1;
int y=2;
int z;
z = x++ || ++y;
printf("x = %d,y=%d,z = %d",x,y,z);
结果为:x = 2,y=1,z=1
因为x++为用的x=1为真,则截断,不在执行后面,则y=1,z=1
5.函数定义时涉及的基本要素
<1>. 函数名,函数体,形式参数
6.进制的转义字符
<1>\ddd ddd表示1-3个八进制的数字。将ddd三个数字转换成十进制,十进制数对应的ASCAII就是结果, ddd 最多只支持三位数字,并且三位数字也不是任意的(每个数字不能大于8,一旦大于8它就不是八进制数了), 一旦大于等于八进制数 '/400 '(十进制256=8进制400就超过了ascall码的范围,编译器就会报错。另外大于三位, 或者遇到非八进制数字时则转换结束,直接取末尾数字。
<2>\Xdd dd表示2个十六进制数,
7.%[]的用法
<1>. 这个参数的意思的读入一个字符集合,[]是集合的标志,因此%[]特指读入此集合所限定的那些字符,比如%[A-Z]限定只能输入大写字母A-Z,一旦遇到不在此集合的字符便停止,如果集合的第一个字符为"^",这说明只能读取不在"^"后面集合的字符,即遇到"^"后面的字符便停止
8.static(静态储存类)的用法
<1>. static是用来修饰变量(全局变量和局部变量)或函数的关键词
<2>. static修饰局部变量时:局部变量被static修饰后生命周期将变得和整个程序一样长,但作用域没有改变,本质上是因为static修饰的局部变量的储存位置改变了,将原本应该存储在栈区的局部变量存储在静态区。静态区上数据存储的特点是,程序结束变量才被释放
<3>. static修饰全局变量时:全局变量是是在不同源文件中可以使用的,只不过需要先用extern外部声明一下,若用static修饰了全局变量,则该变量不能被其他源文件使用,全局变量是具有外部链接属性的,若用static修饰则把外部链接属性变成了内部链接属性,其他源文件不能使用
<4>. static修饰函数时:static修饰函数时其实和全局变量差不多,因为函数也具有外部链接属性,被static修饰后就不能被其他源文件使用了
9.自增运算符在逗号运算符中的使用
<1>. 看个例子:(b=2,a=5,b++,a+b);
这个的结果为3+5=8
它是计算完表达式才自增一,所以,当执行完b++时,这个表达式的值是b,当执行a+b的时候,这时候的b已经变成了(b+1),也就是说,是执行完b++这个表达式之后,就增一了,而不是在执行完这个逗号表达式再增一
10.二进制与十进制之间的转换
<1>. 十进制转二进制:每次用十进制数除以2,得到一个商和一个余数,再用商除以2,依此下去,直到商为0,然后将得到的余数倒序排列写出来
例子: 将十进制11转换为二进制数字
商 余数
11除以2 5 1
5除以2 2 1
2除以2 1 0
1除以2 0 1
将余数倒叙排列则为1011即为十进制11的二进制
<2>. 二进制转十进制:二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……
例子:二进制1011转10进制
从右往左算,最右边为第0位,
2^0 *1 + 2^1*1 + 2^2*0 + 2^3*1=11
一下为从左往右算