算术操作符
+,-,*,/,%
主要是注意 % 运算符
该运算符只能用于整数,得到的是余数。其他的都比较简单
🥇移位操作符
移位操作符是移动的二进制位,并且只能是整数
- 右移操作符==>>==
在这里我只讲一种,那就是算术移位
即右边的抛弃,左边补充符号位
- 例如;
char a=5; char b; b=a>>2; a二进制00000101 右移2位00000001得到b b=1;
- 左移操作符==<<==
向左移动几位,那么左边就抛弃几位,后面就添加几个0。
例如:
char a=2; char b; b=a<<2; a二进制00000010 左移2位00001000 即b的二进制就是00001000; 即b=8;
🥈位操作符
也是对二进制进行的操作。这是双目操作符
&,|,^
- &按位与,有一个位为0就是0
- |按位或,有一个位为1就是1
- ^按位异或,相同为0,相异为1
int main() { int a = 1; 01 int b = 2; 10 a&b 00——》0 a|b 11——》3 a^b 11——》3 printf("%d\n%d\n%d\n", a&b,a|b,a^b); return 0; }
看结果:
赋值操作符
=,+=,-=,*=,/=,%=,>>=,<<=,&=,|=,^=
太简单不要说
🥉单目操作符
单目操作符:只有一个操作数
- (+ -) 就是我们平时的正负号
- ~ 它表示的意思是对一个数的二进制按位取反 ,也就是1变0,0变1。
#include <stdio.h> int main() { int a=0; int b=~a; printf("%d",b); return 0; }
输出结果是-1。
- ! 逻辑非
它的作用把真变假, 把假变真
#include <stdio.h> int main() { int a = 1; if (!a) printf("%d", a); return 0; }
此处并不会有什么会打印出来
因为假就不执行if条件
- ++:包括后置++(先使用,后++)和前置++(先++,后使用)。
- - - 同理
如:
#include <stdio.h> int main() { int a=10,c=10; int b=a++,d=++c; printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d); return 0; }
输出结果为:a=11,b=10,c=11,d=11.
sizeof 操作符
可以算类型的大小,变量的大小。返回值以字节为单位
() 表示强制类型转换
如:int a=(int)3.14;从“double”转换到“int”,可能丢失数据。
但是(int)强制转换就不会出现警告。
& 取地址操作符
关系操作符
>=,>,<=,<,==
太简单了
逻辑操作符
&& 逻辑与
只要左边的表达式有一个为假,那么后面的表达式就不用进行运算了
|| 逻辑或
只要右边的表达式有一个为真,那么后面的表达式就不用进行运算了
条件操作符
条件操作符:exp1?exp2:exp3 它的意思是:表达式1?表达式2:表达式3
它是这样运行的:
如果表达式1成立,表达式2执行;
如果表达式1不成立,表达式3执行。
#include <stdio.h> int main() { int a=10,b=20; int MAX=(a>b?a:b); printf("MAX=%d",MAX); return 0; }
此输出的结果是MAX=20.
逗号表达式
逗号表达式:(exp1,exp2,等等)
整个逗号表达式的结果为最后一个表达式的执行结果,不管前面的执行结果是对是错。
看下面的代码:
#include <stdio.h> int main() { int a = 10; int b = 20; int c = 30; int m = (a < b, a++, b > c, c++, b + c + a); printf("%d\n", m); return 0; }
它的运行结果为:
对这个进行分析(a < b, a++, b > c, c++, b + c + a)
首先a<b成立 继续a++,a变成11,b>c不成立,不用管继续,c++,c变成31,最后执行b+c+a,结果为62,即为m的结果.
下标引用、函数调用和结构成员
[]下标引用操作符
()
函数调用操作符
结构体访问操作符
.
结构体.成员
->
结构体指针成员
上述这些在以后的指针,结构体中会经常用到,暂时不举例子
增加的部分
常见关键字(以下讲解的只是部分)
register signed unsigned typedef
register int a;表示建议把a定义成寄存器变量,因为寄存器的运行速度比内存快。
signed表示有符号数,int 其实是signed int 只不过signed省略了。
unsigned表示无符号数,只有正数,其类型范围也将变大,只是正数范围。
typedef表示类型重定义,如:
#include <stdio.h> int main() { typedef unsigned int u_int; u_int a=10; printf("%d",a); return 0; }
其输出的结果是10.
这里只是把unsigned int 换了一个叫u_int 的名字.