目录
操作符分类:
算术操作符:
移位操作符:
位操作符:
赋值操作符:
操作符分类:
1、算数操作符
2、移位操作符
3、位操作符
4、赋值操作符
5、单目操作符
6、关系操作符
7、逻辑操作符
8、条件操作符
9、逗号表达式
10、下标引用、函数调用和结构成员
算术操作符:
在c语言中算数操作符有五个:+,-,*,/,%。
首先前四个分别为加减乘除我们日常生活中常用的算术符号。与我们日常生活一样,在c语言中这四个运算符号都是需要两个数字进行运算。所以也叫双目操作符。
int main()
{
int a = 5;
int b = 10;
int c = 0;
c = a + b;
c = a - b;
c = a * b;
c = a / b;
return 0;
}
他们运算出来的结果分别是15,-5,50,0;
我们会发现,当结果为浮点数的适合,并不会算出浮点数的结果,那是因为这些变量都是整型的类型,所以如果我们需要结果精确的浮点数,那么我们在算术操作符两边需要有一个浮点数类型才能将结果变成浮点数。
int main()
{
float a = 5.0;
int b = 10;
int c = 0;
c = a + b;
c = a - b;
c = a * b;
c = a / b;
return 0;
}
第五个则为取模的算术操作符,这个操作符在日常生活中不多见,但是在c语言中时常会用到,他是用来计算两个量在做相除计算之后的余数是多少的操作符。
int main()
{
int a = 5;
int b = 10;
int c = 0;
c = a % b;
return 0;
}
这样的运算结果为5。这个运算符的结果不会出现浮点数。
移位操作符:
移位操作符有:<<,>>。分别为左移和右移操作符。
这两个操作符都是对整数在电脑中所存储的二进制序列进行操作的操作符。
顾名思义,左移操作符就是将整数二进制的补码整体像左移动一位,右边空出来的一位用0补齐。
代码就是
int main()
{
int a = 3;
a = a << 1;
return 0;
}
而右移操作符则要分两种情况进行讨论,一种是逻辑位移,一种是算术位移。
逻辑位移同样是将整数的二进制进行操作,但是进行右移之后左边的空位补零,而算术移位则是左边空位看符号位进行补位,负数补1,正数补0。
代码为
int main()
{
int a = -3;
a = a >> 1;
printf("%dn", a);
return 0;
}
位操作符:
位操作符有:&、|、^。分别为按位与,按位或和按位异或
按位与 “ & ” 按二进制位与 有0则为0,同为1才为1。按位或 “ | ” 按二进制位或 有1则为1,同为0才为0。按位异或 “ ^ ” 按二进制位异或 不同为1,相同为0。
int main()
{
int a = 3;
int b = -5;
int c = a & b;//按位与
int c = a | b;//按位或
int c = a ^ b;//按位异或
//00000000000000000000000000000011 --- 3的补码。
//10000000000000000000000000000101 --- -5的原码。
//11111111111111111111111111111010 --- -5的反码。
//11111111111111111111111111111011 --- -5的补码。
//
//00000000000000000000000000000011 --- 3的补码。
//11111111111111111111111111111011 --- -5的补码。
//11111111111111111111111111111000 --- 按位异或补码的结果 原码为 :10000000000000000000000000001000
//11111111111111111111111111111011 --- 按位或补码的结果。 原码为 :10000000000000000000000000000101
//00000000000000000000000000000011 --- 按位与补码的结果。 原码为 :00000000000000000000000000000011
//
//%d 意味着打印一个有符号的整数
//
printf("c = %dn", c);
return 0;
}
当3和-5进行这三种操作时,按位与的结果为3,按位或的结果为-5,按位异或的结果则为-8。
其中异或的操作符还有一个妙用,就是可以在不创建临时变量的情况下去把两个变量的值相互交换。
int main()
{
int a = 3;
int b = 5;
printf("a = %d,b = %dn", a, b);
a = a ^ b;//a = 3^5;
b = a ^ b;//b = 3^5^5 = 3;
a = a ^ b;//a = a^5^3 = 5;
printf("a = %d,b = %d", a, b);
return 0;
}
因为当两个相同的数进行异或后会变成0,而0异或任何数都会变成那个数。这样我们就可以用异或进行两个数的交换了,但是这种写法也有弊端那就是,运行速度并没有创建临时变量来的快,并且可读性不高,不建议使用。
赋值操作符:
赋值操作符分为 = 和复合赋值操作符,复合赋值操作符有+=、-=、*=、/=、%=、<<=、>>=、&=、|=、^=。
其中 = 这个赋值操作符的应用非常多,都很熟悉,但是要记住不要写成双等于号的比较相等的操作符。还有,赋值操作符只在对已有的变量进行修改的适合才是赋值,当创建变量并给值的时候是初始化,并不是赋值动作。
然后赋值操作符可以进行连续赋值,计算顺序是从右往左,但是可读性不高和不易调试性不建议这样去使用。
int a = 10; int x = 0; int y = 20; a = x = y + 1;//先将y+1赋值给x再将x的值赋给a。 //不建议这样写代码,不方便后期调试。 //可写成这样 x = y + 1; a = x; //这样的写法更加清爽且易于调试。
复合赋值操作符就是当你想要将一个变量进行运算操作后再重新赋值给本来的变量时,可以用到,使代码更加清爽整洁,易读性更高。
int main()
{
int a = 3;
a = a + 5;
a += 5;
a = a >> 1;
a >>= 1;
return 0;
}
本章先讲这四类操作符,其他六类在下一章中详细解读。



