c中的操作符

操作符分类:
*算术操作符
*移位操作符
*位操作符
*赋值操作符
*单目操作符
*关系操作符
*逻辑操作符
*条件操作符
*逗号表达式
*下标引用、函数调用和结构成员

——————————————-

*算术操作符

+     -       *      /       %   

1.除了%操作符外,其他的几个操作符可以作用于整数和浮点数。
2.操作符 / 如果两边都为整数,则结果为整数。两边只要有任意一个数是浮点数(或者两个都为浮点数),则结果为 浮点数。列:(3/2=1、3/2.0=1.5)
3.操作符%两边必须为整数,结果是整除之后的余数。如果被除数小于除数,则结果为被除数。列:(10%3=1、10%4=2、3%5=3)

*移位操作符(移二进制序列)

右位移操作符
<< 左位移操作符
列:(a=10 a<<1=20 a=10,位移之后a的值不变)(a=10 a=a<<1 a=20)
右移:(算数右移:左边补原来的的符号,右边丢弃 逻辑右移:左边补零,右边丢弃)
这里写图片描述

*位操作符

& //按位与
| //按位或
^ //按位异或
(它们三个的操作数必须是整数)
这里写图片描述

*赋值操作符
=
将变量赋值成想要的值

   int a=0,b=0; 
   a=20;
   b=a;//b=20
   b=a=10//a=10,b=10(连续赋值)

(复合赋值符)

  1. +=
  2. -=
  3. *=
  4. /=
  5. %=
  6. >>=
  7. <<=
  8. &=
  9. |=
  10. ^=
    这些运算符都可以写成复合的效果
int m=7;
x=x+1;//x=8
x+=1;//x=8,与上面效果一样

*单目操作符

   !               逻辑反操作
   -                负值
   +                正值
   &                取地址
   sizeof           操作数的类型长度(以字节为单位)
   ~                对一个数的二进制按位取反
   --               减减(--前置    后置--)
   ++               加加(++前置    后置++)
   *                间接访问操作符(解引用操作符)
  (类型)           强制类型转换
int a=5,b=3;
printf("%d",a++);//输出结果为5,先输出再自增
printf("%d",++a);//输出结果为6,先自增在输出
printf("%d",b--);//输出结果为3,~
printf("%d",--b);//输出结果为2,~

*关系操作符

>
>=
<
<=
!=     不相等
==     相等

*逻辑操作符

&& 逻辑与 (1&&2,结果为1(真),1和2都为真)
|| 逻辑或 (1||0,结果为1(真),1为真0为假)

*条件操作符

A>B?C:D(A如果大于B,则执行C.不大于则执行D)
例:
int  a=6,b=2,c=0,b=0;
c=a>b?a+b:a-b;  //执行结果为c=8
d=b>a?a+b:a-b;  //执行结果为d=4

*逗号表达式

逗号表达式就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果。

*下标引用、函数调用和结构成员

1.[ ]
操作数:一个数组名+一个索引值

arr[7] //arr为数组名,7表示arr数组中有7个元素

2.()
函数调用操作符
接收一个或者多个操作数:第一个操作数的是函数名,剩余的操作数是传递给函数的参数。

3.访问一个结构体成员

.      结构体.成员名
->     结构体指针->成员名

操作符的属性
复杂表达式求值得三个影响因素
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序

两个相邻的操作符先执行哪个?取决于他们的优先级。如果两个的优先级相同,则取决于他们的结合性!

int a=1;
b=(a++)+(a++)+(a++);//这是一个问题代码,不同的编译器执行出的结果也不相同。(例:vc6.0中值为10,vs中值为12)

猜你喜欢

转载自blog.csdn.net/Amin20w/article/details/78609735