C语言运算符有:
算术运算符、关系运算符、逻辑运算符、移位运算符、单目运算符等。
算术运算符
+、-、*、/、%、++、--。
顾名思义
+——加法运算,-__减法运算,*__乘法运算,/__除法运算,%__求余运算。
在使用算术运算符过程中要认识到数据类型的转换规则,如图所示
横向箭头表示低精度数据类型在进行运算时运算结果的数据类型强制向高精度数据类型转换。
纵向箭头表示在数据类型在进行运算时,如果运算结果超出数据类型存储范围,运算结果数据类型会向高精度数据类型转换。
算数运算符优先级
*、/、%优先级高于+、-
例如: a+b*c,执行完b*c后在与a相加
算术运算符遇到同优先级运算符时,按从左往右的方法进行计算。
例如:a*b/c%a,依次从左往右执行。
关系运算符
> 、<、 >=、 <=、 ==、 !=
运算符两端值进行判断,判断结果为真输出1,判断结果为假输出0。
例如:
int a=100,b=50,c=0;
c=a>b;若a大于b结果为真,则c=1,否侧c=0;
c=a<=b;若a小于等于b结果为真,则c=1,否侧c=0;
逻辑运算符
&&、||、!
逻辑与&&,有0出0,全1出1
逻辑或 | | ,有1出1,全0出0
逻辑非 ! ,0为假 非0为真
在进行逻辑与运算时一端为假则结果为假,不会再执行另一端表达式。
例如:int a=100,b=50,z=0;
z=a<b&&b++;a<b为假,逻辑表达式值为0不在执行b++。最终结果得z=0,b=50
在进行逻辑或运算时一端为真则结果为真,不会再执行另一端表达式。
例如:int a=100,b=50,z=0;
z=a>b||b++;a>b为真,逻辑表达式值为1不在执行b++。最终结果得z=1,b=50;
移位运算符
<<,>>
移位运算符分为左移运算符和右移运算符法
左移运算<<是将数往左移位,空位补零。例如:
unsigned short a=45; a=a<<3;
将2转换为二进制数为
0000 0000 0010 1101
<<3后去掉高三位,低三位补0
000 0000 0001 0110 1000
结果为:0000 0001 0110 1000
右移运算<<是将数往左移位,空位补零。例如:
unsigned short a=45; a=a>>3;
将2转换为二进制数为
0000 0000 0010 1101
>>3后去掉低三位,高三位补0
000 0000 0000 0000 0101 101
结果为:0000 0000 0000 0101
单目运算符
++、--、&、~。
++自增运算符有两种用法,一种是放在变量前使用,一种是放在变量后使用。
++放在变量前作用是先自增再调用,例如:
int a=0;
printf("%d\n",++a);//此时打印的结果是1,因为a先自增了再打印
++放在变量后作用是先调用再自增,例如:
int a=0;
printf("%d\n",a++);//此时打印的结果是0,因为a先打印再自增
printf("%d\n",a);//此时a的值打印出来是1
--自减运算符用法和自增运算符一样。
&是取地址符,使用&得到的是变量的地址
~是取反运算符,将变数据变成二进制数,然后将存储的二进制数全部取反。
例如 short int a=213;对a进行取反~a
0000 0000 0000 0000 0000 0000 1101 0101
~
1111 1111 1111 1111 1111 1111 0010 1010
现在符号位为1,变成的负数的存储方式,要想知道取反后a的值是多少就得把现在的值还原成原码。
对它进行-1还原补码前的数据,得到:
1111 1111 1111 1111 1111 1111 0010 1001
对符号位外取反还原反码前的数据就能得到原码了
1000 0000 0000 0000 0000 0000 1101 0110
取反后a的值就为-214。编译器验证如图: