C语言操作符总结

总结一下C语言操作符总结

一、算术操作符。

+	-	*	/	%

注意:

  1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
  2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
  3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

二.移位操作符

<< 左移操作符   
>> 右移操作符

(1)左移操作符:移位规则:左边抛弃、右边补0

例如:
9在内存中的二进制数为  0000 0000 0000 0000 0000 1001
左移一位为            0000 0000 0000 0000 0001 0010
注意:在进行移位操作时,是对一个整数的二进制补码进行移位。    
   (在计数机中数据以二进制补码的形式存储。正数的原码、反码、补码相同,负数的补码形式是在原码的条件下除符号位其他全部取反,再加1。)
    int a =10;    
    b=a<<1;   
    可以得到b=20,a还是10。可以看出左移操作具有乘以2的效果,a的值本身不变。

(2)右移操作符:移位规则:首先右移运算分两种:

  1. 逻辑移位:不需要考虑符号产生的问题左边用0填充,右边丢弃
例如:
-1在内存中的二进制数为  1111 1111 1111 1111 1111 1111
逻辑右移一位为         0111 1111 1111 1111 1111 1111
  1. 算术移位:二进制数有正负之分,补位时要注意符号位,左边用原该值的符号位填充,右边丢弃
(实际应用中,算术移位用的比较多,因为逻辑移位如果是一个负数,移完之后会变为一个正数,误差太大。)
右移操作也可以用来计算二进制中为“1”的比特位。
将一个32位的二进制数的末位依次右移,然后和1按位与,如果得到的结果为1,则说明原数末位为1,否则为0.
注意:对于移位运算符,移动负数位是没有意义的。
例如:
-1在内存中的二进制数为  1111 1111 1111 1111 1111 1111
算术右移一位为         1111 1111 1111 1111 1111 1111

注意:
1.左移操作相当于/2;右移操作相当于*2。
2.对于移位运算符,不要移动负数位

三.位操作符

&	//按位与(遇0则0)
|	//按位或(遇1则1)
^	//按位异或 (相同为0,相异为1)
注:他们的操作数必须是整数。

四.赋值操作符

1.赋值操作符在之前的程序代码中经常出现,赋值操作符连续赋值

=  //赋值运算符

注意在连续赋值时,应从右往左赋值,
例如:
a=x=y+1;
输出时a的值就应是y+1。

2.复合赋值符

+=

-=

*=

/=

%=

>>=

<<=

&=

|=

^=

五.单目操作符

!             逻辑反操作
-             负值  
+             正值
&             取地址
              数组名——是一个数组中首元素的地址
              &数组名——是指整个数组的地址
sizeof ()     操作数的类型长度(以字节为单位)
~             对一个数的二进制按位取反
--            前置--(先赋值,后运算)
              后置--(先运算,后赋值)
++            前置++(先赋值,后运算)
              后置++ (先运算,后赋值)
*             间接访问操作符(解引用操作符) 
(类型)        强制类型转换
 注意:1.sizeof是一个操作符,它不是一个函数。
      2.sizeof内部表达式不参与运算。
      (源文件要变成可执行文件需要通过编译和执行两个过程,sizeof操作符是在编译时就可以得知数的类型的字节数,在编译阶段还没有创建a,s的变量,所以s得值还是原来的值,并没有将10+8的值赋给s。)
      3. sizeof可以求变量(类型)所占的空间大小。
         eg: sizeof( a ) / sizeof( a[ 0 ] )可以求一个数组的大小。
      4.sizeof(short)求变量类型所占的空间大小(short所占空间大小为2)

六.关系操作符

>            大于
>=           大于等于
<            小于
<=           小于等于
!=           用于测试“不相等”
==           用于测试“相等”

注意== 和=不小心写错

七.逻辑操作符

&&     逻辑与(将两个表达式连接成一个。两个表达式必须都为 true,整个表达式才为 true)
||     逻辑或(将两个表达式连接成一个。必须有一个或两个表达式为 true,才能使整个表达式为 true)

注意
1.如果 && 运算符左侧的子表达式为 false,则不会检查右侧的表达式。
2.如果 || 运算符左侧的子表达式为 true,则右侧的子表达式将不被检查。

*区分逻辑与(&&)和按位与(&)
*区分逻辑或( || )和按位或( | )

例如:

1&2----->0
1&&2---->1

1|2----->3
1||2---->1

八.条件操作符

exp1 ? exp2 : exp3
例如
int a=10;
int b=20;
int c=a>b?a:b

结果:c=20

九.逗号表达式

exp1, exp2, exp3, …expN

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

int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);//逗号表达式

结果:c=13
if (a =b + 1, c=a / 2, d > 0)
相当于 if(d>0)

十.下标引用、函数调用和结构成员
1.[ ] 下标引用操作符 操作数:一个数组名 + 一个索引值

例如:
int arr[10];//创建数组
arr[0] = 0;//实用下标引用操作符。
[ ]的两个操作数是arr和0。

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

scanf();
printf();

3.访问一个结构的成员

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

十一.操作符优先级

1、优先级1级
结合方向 左结合(自左至右)

( )    圆括号
[ ]    下标运算符
->     指向结构体成员运算符
.      结构体成员运算符 [1]  (请注意它是一个实心圆点)

2、优先级2级
结合方向 右结合(自右至左)单目运算符

!      逻辑非运算符
~      按位取反运算符
++     自增运算符
--     自减运算符
-      负号运算符
(类型)  类型转换运算符
*      指针运算符
&      地址与运算符
sizeof 长度运算符

3、优先级3级
结合方向 左结合 双目运算符

*      乘法运算符
/      除法运算符
%      取余运算符

4、优先级4级
结合方向 左结合 双目运算符

+      加法运算符
-      减法运算符

5、优先级5级
结合方向 左结合 双目运算符

<<     左移运算符
>>     右移运算符

6、优先级6级
结合方向 左结合 双目运算符

<、<=、>、>= 关系运算符

7、优先级7级
结合方向 左结合 双目运算符

==     等于运算符 (判断)
!=     不等于运算符(判断)

8、优先级8级
结合方向 左结合 双目运算符

&      按位与运算符

9、优先级9级
结合方向 左结合 双目运算符

^      按位异或运算符

10、优先级10级
结合方向 左结合 双目运算符

|      按位或运算符 举例:0xfe|0xef 即为1111 1110 与1110 1111按位或运算则答案为:1111 1111 即0xff。

11、优先级11级
结合方向 左结合 双目运算符

&&     逻辑与运算符

12、优先级12级
结合方向 左结合 双目运算符

|| 逻辑或运算符
13、优先级13级
结合方向 右结合 三目运算符

? :    条件运算符

14、优先级14级
结合方向 右结合 双目运算符

=      赋值运算符
+ =    加后赋值运算符 如s+=1表示s=s+1
- =    减后赋值运算符 如s-=1表示s=s-1
* =    乘后赋值运算符
/ =    除后赋值运算符
% =    取模后赋值运算符
< <=   左移后赋值运算符
>>=    右移后赋值运算符
&=     按位与后赋值运算符
^=     按位异或后赋值运算符
|=     按位或后赋值运算符

15、优先级15级
结合方向 左结合

,     逗号运算符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值