C语言 —— 操作符详解

在学习这章节之前呢,咱们先了解一下操作符的分类(有哪些操作符)

目录

算术操作符

移位操作符

左移操作符 <<

右移操作符 >>

逻辑右移

算数右移

位操作符

按位与 &

按位或 |

按位异或 ^ 

赋值操作符

 复合赋值符

单目操作符

 逻辑反操作  !

取地址操作符 &与解引用操作符

操作数的类型长度 sizeof

 前置++(--)后置++(--)

关系操作符

逻辑操作符

条件操作符

逗号表达式

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


算术操作符

+     -      *      /      %

 这里提一点 除号想要得到小数是要技巧的:

 这里是为了更好的演示,实际上第一个式子应该用%d来打印的

所以得出结论:除法操作符的两个操作数都是整数的话,进行的是整数除法。

                        有一个浮点数的话,就进行的是小数除法。

而%取模操作符的操作数必须都是整数。


移位操作符

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

这里的两个操作符的对象是二进制的“补码”

正整数:二进制的原码,反码,补码都相等。

负整数:二进制的原码符号位不变,其它位按位取反变成反码,反码通过+1变成补码。

符号位是该数字二进制位最高的一位,0表示正,1表示负。                        例如:

 提一点:整数正在内存中存储的是补码,而我们一般看到的或者拿到的都是整数的原码。


左移操作符 <<

二进制的补码向左移动几位就丢弃几位,同时向右边补几位0.

举例说明:

右移操作符 >>

编译器采用的都是算数右移噢

逻辑右移

左边用0填充,右边丢弃。

算数右移

左边用原来的数值的符号位填充,右边丢弃。


位操作符

&     |     ^                按位与,按位或,按位异或

操作对象同样是整数二进制的补码。

按位与 &

        两个整数的二进制序列对应的二进制序列中都为1则为1,否则就位0.

 提一点:这里按位与之后的符号位是0,则为正,所以原,反,补相同,如果符号位为1,则为负                 数,那么得出的结果就是补码,我们需要求出原码的结果才是变量c的值。

按位或 |

        两个整数的二进制序列对应的二进制序列中有一个为1则为1,否则就为0.

按位异或 ^ 

         两个整数的二进制序列对应的二进制序列中相同则为0,相异则为1。(同假异真)

编译就留给聪明的你了!


赋值操作符

=

对数据重新赋值

 复合赋值符

+=     -=     *=     /=     %=     >>=     <<=     &=     |=     ^=

a+=3  a=a+3//等价
a&=3  a=a&3//等价
a>>=3 a=a>>3//等价

单目操作符

逻辑反操作  !

 这里 !flage 等价于flage==0


取地址操作符 &与解引用操作符

 详细可见: 

http://t.csdn.cn/Wu6sh

操作数的类型长度 sizeof

以字节为单位,计算的是所占内存空间的大小。

 注意了,sizeof 是操作符,计算的是操作数的类型长度,与操作数的数值无关,可万万不能把它当作函数了呀!

 前置++(--)后置++(--)

 

 ++也是同样的道理。


关系操作符

逻辑操作符

&&                           逻辑与

||                              逻辑或

 操作对象是数值的真假

&&逻辑与,操作数都为真才为真,返回1

||  逻辑或,操作数有一个为真就为真,为假返回0

经典例题一道:

 解:这里的a++是后置++,先使用后++,所以就是0&&后面的值,而&&的规则是只要一个为假就为假,从左往右看,第一个为假,则后面的表达式不执行,因为后面的表达式就算执行了也无意义(不影响结果),所以就直接跳出该行代码,执行下一行。那么 || 也同理,赶紧练起来吧!

条件操作符

 先判断表达式1(exp1)的结果,为真则计算表达式2,表达式3不计算。为假则计算表达式3,表达式2不计算。

逗号表达式

 小提一道:

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

  [ ]                        下标引用操作符

()                       函数调用操作符

 .                  结构体.成员名

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

 而这里的下标引用操作符[ ]的两个操作数分别是arr和10

猜你喜欢

转载自blog.csdn.net/C_Rio/article/details/128935380
今日推荐