操作符的分类
朋友们,追秋再一次和你们见面啦!!!!
操作符是我们在学习C语言的一个重要的基础知识,掌握它们,可以让自己变得更加优秀。
算术操作符
算数操作符一共有五个,如下图所示:
在这些操作符中,大多数的运算法则都是大家所熟悉的,当然有的操作符会有一些其它的运算法则,下面我给大家细细讲解:
/ 操作符
首先是 / (除号)操作符,对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。下面用一组例子来给大家解释一下:
可以看到其实5。0/2.0的结果是可以得到2.5这个通过正常运算所得到的数字,不过因为X是用整形的形式来接受,所以只保留了整数位;而浮点型float就可以保留小数位。同样可以得到这个结果的类型还有double****类型,这里不给大家一一举例了。
当然,说到这里,肯定就有家人们要问了,那怎么样才能只保留小数点后面一位或者两位呢?下面直接上代码:
显然,我们只需要在输出函数处加上一些小小的改变就行,具体看上图。
%操作符
% 操作符的两个操作数必须为整数。返回的是整除之后的余数。
下面看代码:
移位操作符
注:移位操作符的操作数只能是整数
整形二进制的组成
而其中,移位操作符操作的是整数的二进制序列,那什么是二进制序列呢?下面给大家讲解一下:
整数的二进制表示形式有三种:原码、反码、补码
二进制数由符号位和数字位组成,共计32bit位,其中8bit位为一个字节,这个接下来会给大家带着补充。
原码
原码:按照数值的正负,直接写出的二进制序列就是原码,下面举例:
注:0当成无符号数处理!
反码
反码:原码的符号位不变,其他为按位取反;
补码
补码:反码的二进制数+1就可以得到补码,如上图所示
做了这么多的铺垫,下面终于来到了操作符的环节了,话不多说,直接开始。
<< 左移操作符
移位规则:左边抛弃,右边补零,且是在操作数的二进制序列的补码上进行操作,下面给大家讲解一下:
正数:
上面是操作符的运算结果,下面给大家讲解原理:
负数:
下面给出原理:
其实大家可以发现,正数和负数的操作原理是相同的,也就是说,对于左移操作符来说,整数的操作是相同的。
>>右移操作符
右移操作符分为两种移位方式:
逻辑右移:右边丢弃,左边补零
算术右移:右边丢弃,左边补原符号位;正数补0,负数补1
下面给大家讲解一下算术右移:
而逻辑右移大家可以发现,简单粗暴,与左移操作符的方式一样,但是对于负数的移动,会将对象改为正数,而在大多数编译器上都是采用算术右移,因此这里就不要给大家讲逻辑右移了。
通过上面的例子大家可以看到,不论是左移还是右移,会将操作数的大小变为原来的两倍或是变为一半,那移动两位呢?下面给大家举一些例子:
因此我们可以得出,通过移位操作符可以改变的操作数的大小为2的倍数或是0.5的倍数;这就为以后大家在一些特殊的情况下使用起来提供一个便利的条件。
补充:在使用移位运算符时,不要移动负数位,这是标准未定义的
位操作符
& //按位与
按位与:按(操作数的二进制数)位与
操作数的二进制数的补码,同为相比,有0则为0;两者为1才为1。下面举例说明:
讲到这里,其实我们可以发现:通过移位操作符和按位与&操作符可以得到我们想要的操作数的任意二进制位的大小,下面举例说明:
注:1的二进制序列除了第一位其余都是0,任意数按位与上0就可以得到最低为的大小,辅助以移位操作符就可以得到二进制位的任意位的大小。
| //按位或
按位或:按(操作数的二进制数)位或
操作数的二进制数的补码,同为相比,有1则为1;两者为0才为0。
^ //按位异或
按位异或:按(操作数的二进制数)异或
操作数的二进制数的补码,同为相比,相同为0,相异为1。下面举例:
下面将一个常用的用法:
因为0的二进制序列全是0,所以和其它数按位异或的时候,得到的数就是另一个数本身。
下面给大家分享一个例子:
不能创建临时变量(第三个变量),实现两个数的交换。
方法一:
方法二:
该方法只适用于整形的交换,且可读性较差,请读者谨慎使用
注:他们的操作数必须是整数,且是对于补码进行操作
赋值操作符
复合赋值符
常见的赋值操作符大家早已了解,下面给大家将一个少见的:
单目操作符
- 负值
- 正值
& 取地址
– 前置、后置–
++ 前置、后置++
*间接访问操作符(解引用操作符)
(类型) 强制类型转换
! 逻辑反操作
变假为真,变真为假
sizeof 操作数的类型长度(以字节为单位)
sizeof和数组:
~ 对一个数的二进制按位取反
下面用一个例子来说明作用:
接着将该位改回原来的数值:
关系操作符
<(小于) >(大于)
<= (小于等于) >=(大于等于)
!= 用于测试“不相等”
== 用于测试“相等”
警告:
在编程的过程中== 和=不小心写错,导致的错误
逻辑操作符
&& 逻辑与
|| 逻辑或
下面给上一个例子:
条件操作符
exp1 ? exp2 : exp3
这里就是一个简单的逻辑问题,就不给大家细讲了
逗号操作符
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
注:这并不代表只需计算最后一个表达式的值,因为前面的表达式的计算结果会影响最后一个表达式的结果
下标引用,函数调用和结构成员
基础知识,这里也不给大家讲啦啦啦啦啦啦(其实就是想偷懒一下哈哈哈哈哈)
好了,这次的分享就到这里了,感谢各位老铁们的阅读!!!!
期待下次见面,白白!!!!