本篇博客将为大家介绍C语言中的操作符,C语言中有很多的操作符,有些操作符前面大家应该有所了解。比如算数操作符、关系操作符、逻辑操作符等等;下面将为大家介绍更多的操作符,希望大家一键三连,多多支持!
1. 操作符的分类
关于操作符的详细分类,这里有一张图,大家请看
上图展示了C语言中的所有常用操作符,大家会发现,有一部分咱们前面学过,还有一部分可能有同学并不了解,没有关系,咱们下面来逐个介绍。由于上面的有些操作符与二进制有关系,所以这里必须先来介绍二进制的相关内容。
2. 二进制和进制转换
其实我们经常能听到2进制、8进制、10进制、16进制这样的讲法,那是什么意思呢?其实2进制、8进 制、10进制、16进制是数值的不同表示形式而已。
这里我们重点介绍二进制:
首先我们还是得从10进制讲起,其实10进制是我们生活中经常使用的,我们已经形成了很多尝试:
• 10进制中满10进1
• 10进制的数字每⼀位都是0~9的数字组成
其实二进制与其类似:
• 2进制中满2进1
• 2进制的数字每⼀位都是0~1的数字组成
2.1 二进制转十进制
二进制转十进制时,二进制的每一位权重,从右向左,依次为2^0、2^1、2^2……
上图展现了二进制转换十进制的计算方法,相信大家可以轻松掌握。
2.1.1 十进制转二进制
这里拓展一下十进制转二进制的常见方法,大家请看下图
这种方法想必大家之前也接触过,这也是十进制转二进制的一种比较方便的方法。
2.2 二进制转八进制和十六进制
2.2.1 二进制转八进制
8进制的数字每⼀位是0~7的,0~7的数字,各自写成2进制,最多有3个2进制位就足够了,比如7的二进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算一个8进制位,剩余不够3个2进制位的直接换算。举个例子
通过上面的例子大家应该可以理解二进制转为八进制的方法了;这里还需要注意一下,0开头的数字会被当作八进制数字
2.2.2 二进制转十六进制
16进制的数字每⼀位是0~9,a~f的,0~9,a~f的数字,各自写成2进制,最多有4个2进制位就足够了, 比如f的⼆进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算。还是举个例子来看
上面的例子展示了二进制转十六进制的方法,这里大家需要注意,十六进制的数字前面需要加上0x
3. 原码、反码、补码
整数的2进制表示方法有三种,即原码、反码和补码,有符号整数的三种表示方法均有符号位和数值位两部分,2进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。 符号位都是用0表示“正”,用1表示“负”。
下面有几点注意事项:
正整数的原、反、补码都相同。
负整数的三种表示方法各不相同。
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
反码得到原码也是可以使用:取反,+1的操作。
对于整型来说,数据是以补码的形式存放在内存中的。这里可能有同学会有疑问,为什么是以补码的形式存放呢?
这里给大家拓展一下,在计算机系统中,数值⼀律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统⼀处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
上面的内容大家了解即可,不需要额外记忆。
4. 移位操作符
<< 左移操作符
>> 右移操作符
这里注意:移位操作符的操作数必须是整数。
4.1 左移操作符
移位规则:左边抛弃,右边补0
上面展示了左移的操作,大家应该可以理解。然而,我们不仅要知道左移的操作,我们还需要了解它产生的效果,下面通过代码来演示左移操作符对数据产生的影响。
通过上面的代码,想必大家应该可以猜到左移操作符的作用了,它可以按照2的幂次去改变数据。
不过大家注意一下,当初始数据是0时,那么无论左移几位,结果都是0;
4.2 右移操作符
移位规则:右移运算分为两种,一种是逻辑右移,一种是算术右移,它们之间有一定的区别
1.逻辑右移:左边用0填充,右边丢弃
2.算术右移:左边用原该值的符号位填充,右边丢弃
下面通过两张图展示一下两种方法
通过上面的两张图,大家应该可以理解两种右移的区别。
下面,将为大家展示右移操作符产生的效果,大家请看下面的代码
大家看完上面的代码。应该可以理解右移操作符的作用了,与左移操作符一样。它也可以按照2的幂次去改变数据
但是这里也有例外,当初始数据为0或者-1时。它们不会被右移操作符改变,大家请看下面的代码
说到这里,移位操作符就给大家介绍完了,最后,我还想提醒大家一点,就是移位操作符的操作数不能为负数,这个标准是未定义的,大家在使用的时候需要注意。
5. 位操作符
位操作符有四种,分别是
& 按位与
| 按位或
^ 按位异或
~ 按位取反
位操作符的操作数必须是整数
下面通过代码为大家展示它们产生的效果
5.1 &操作符
大家可以看到,上面展示了&操作符的运算方法,它的运算规则很简单,就类似于数学里学的"并且“,当两边都是真时,结果才为真。
5.2 | 操作符
这里大家可以类比上面&操作符去理解。”|“操作符的运算规则是当两边都为假时,结果才为假。
5.3 ^ 操作符
这里大家可以看到按位异或操作符的运算方法,即相同取0,不同取1。
5.4 ~ 操作符
这里大家直接来看代码
按位取反,顾名思义,就是每一位都取反。
OK,上面为大家介绍了位操作符的相关内容,这里还需要为大家说明,我们在计算的时候,都是用补码进行计算的;而打印的时候打印的是原码对应的数据。
6. 单目操作符
单目操作符包括以下内容
上面展示的单目操作符中,我们除了&和*没有学,其他的前面大家应该都了解过,关于&和*。它们是指针里重要的操作符,后面说到指针时再为大家介绍。
7. 逗号表达式
逗号表达式的内容很简单,它的表示形式如下
这里大家需要知道逗号表达式的执行规则:从左向右执行,结果为最后一个表达式的结果。
8. 下标引用操作符
这个在数组的学习中给大家介绍过,这里不做赘述。
9. 函数调用操作符
接受⼀个或者多个操作数:第⼀个操作数是函数名,剩余的操作数就是传递给函数的参数。
10. 总结
本篇博客为大家介绍了C语言中的绝大部分操作符,剩余个别的会在后面的内容中陆续为大家介绍,操作符的内容属于基础内容,请大家重视对其的理解,在代码中适当使用。最后,希望本篇博客可以为大家提供帮助,如果存在错误,欢迎大家评论交流,谢谢!