【C语言攻略】从零开始的C语言生活——初阶篇(6)操作符详解
目录
操作符
C语言给出了很多的操作符供我们使用,操作符可以帮助我们实现各种的运算。我们可以先对操作符进行一个简单的分类,操作符可以分为:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式还有下标引用、函数调用、结构体成员。
算术操作符
算术操作符
+ 加法操作符 - 减法操作符 * 乘法操作符 / 除法操作符 %% 取模操作符
唯一要注意的是除法操作符和取模操作符,当进行除法时如果是两个整形相除只能得到整形,比如7/3得到的的不是2.5,而是2,如果想要得到一个浮点数请用浮点类型进行除法运算。再说取模,取模其实是取余数,比如7/3,商2余1,那么得到的那个余数1就是要得到的数。
移位操作符
移位操作符
<< 左移操作符 >> 右移操作符
C语言给出了很多的操作符供我们使用,操作符可以帮助我们实现各种的运算。我们可以先对操作符进行一个简单的分类,操作符可以分为:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式还有下标引用、函数调用、结构体成员。
+ | 加法操作符 |
- | 减法操作符 |
* | 乘法操作符 |
/ | 除法操作符 |
%% | 取模操作符 |
唯一要注意的是除法操作符和取模操作符,当进行除法时如果是两个整形相除只能得到整形,比如7/3得到的的不是2.5,而是2,如果想要得到一个浮点数请用浮点类型进行除法运算。再说取模,取模其实是取余数,比如7/3,商2余1,那么得到的那个余数1就是要得到的数。
<< | 左移操作符 |
>> | 右移操作符 |
左移右移其实移动的是数字的二进制位,在计算机中数字都是由二进制存储的。左移操作符就是将除了符号位其他为全部向左移动n位。
右移操作符和左移的用法一样,只不过是将二进制位向右移动。
位操作符
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
在计算机中0为假,非0为真,位操作符也是操作数的二进制位,首先说按位与&,他是将两个数的二进制原码计较,两数有0则为0,全1才为1。
按位或 | ,则是,一个为1则为1,两个为0才为0。按位异或是两数相同则为0,两数相异为1。
赋值操作符
= | 赋值操作符 |
+= | 加等于 |
-= | 减等于 |
*= | 乘等于 |
/= | 除等于 |
&= | 按位与等于 |
|= | 按位或等于 |
^= | 按位异或等于 |
<<= | 左移后等于 |
>>= | 又移后等于 |
赋值操作符=,应该都知道用法了。其他的操作符其实也很好理解,就是将一个变量进行运算之后再把计算的结果还赋值给这个变量,例如:
- #include<stdio.h>
- int main()
- {
- //int sum=3;
- //sum=sum+2;
-
- //可以等价为
- int sum=3;
- sum+=2;
- return 0;
- }
单目操作符
介绍了这么多操作符,有没有发现这些操作符都是要有两个操作操作数才能进行操作,
像 操作数 操作符 操作数的形式使用,单目操作符则是只有一个操作数就可以完成他的功能。
! | 逻辑反操作符 |
- | 负值 |
+ | 正值 |
& | 取地址操作符 |
sizeof | 以字节为单位,计算操作数类型的长度 |
~ | 操作数二进制位按位取反 |
-- | 前置--、后置-- |
++ | 前置++、后置++ |
* | *间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
!:逻辑反操作符,0则为1,非0则为0。
-:负值操作,将操作数变为负数,假如操作数已经是负数了,则负负得正。
+:表示正数,没啥用,可以省略,就算是给负数加个正号,根据负正得负还是负数。
&:取地址操作符,取出变量在内存中存放的地址位置,地址以十六进制表示。
sizeof:以字节为单位,计算数据类型的长度大小。前面有介绍过就不多解释了。
~:按位取反,将操作数的二进制位按位取反。
想要理解为什么6按位取反后得到的是-7,就要先了解数字在计算机里是如何存储的。在计算机中整形是以二进制的补码存储的,整形占4个字节即32位。
第一位表示符号位,0为正数,1代表负数。而6是正数,正数的原码、反码、补码不变。将6的二进制按位取反,如何再得到这个数的补码,就是-7:
--:前置--和后置--,这两个的区别就在于,前置的--的对操作数先进行-1的操作后再进行使用,而后置的--则是先使用再进行--。
++:前置++与后置++,和前置--和后置--一样使用,所以就不做解释了。
*:解引用,用来对指针进行解引用操作,通过指针去放访问 指针所存储变量的地址所存的值。
(类型):强制类型转换,能够将数据类型进行强制转换,比如将int类型的数据,强制转换成double类型的浮点型数字。
关系操作符
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
== | 判断等于 |
!= | 判断不等于 |
关系操作符更多是用于选择语句判断或判断循环语句的循环条件。
>:判断左操作数是否大于右操作数。
<:判断左操作数是否小于右操作数。
>=:与数学的方式不同(≥),编程语言中是以这种方式表示大于等于的,判断左操作数是否大于或者等于右操作数。
<=:断左操作数是否小于或者等于右操作数。
==:判断两个操作是否相等,但切勿将两个等于号写成一个等于号,一个等于号叫做赋值操作。当一个变量与一个常量比较时可以写成这样:5==a,可以防止不小心写成一个等于号。
!=:用来判断两个条件是否是不相等的。
逻辑操作符
&& | 逻辑与 |
|| | 逻辑或 |
也是多用于选择语句和循环语句的判断
&&(并且):只有当两个条件都成立时则条件成立,否则就算其中一个条件成立另一个不成立,也是不成立。
||(或者):当两个条件有其中一个条件成立,则条件成立,两个条件都不成立则条件才不成立。
条件操作符
exp1?exp2:exp3 | 也叫三目操作符 |
可以用来比较大小,玩的牛的大佬也拿去递归了。
逗号表达式
exp1,exp2,exp3......expN | 逗号表达式 |
直接举个例子:
下标引用、函数调用、结构体成员
[ ] | 下标引用操作符 |
() | 函数调用操作符 |
. | 点操作符 |
-> | 箭头操作符 |
[ ]:下标引用操作符,是用来访问数组下标的,通过数组下标找到数组下标所对应的元素
():函数调用操作符,用来调用函数的参数,函数的参数比较特殊,可以没有参数也可以有很多参数,参数以逗号隔开。但是必须要有函数名 。函数名(参数)
.:点操作符用来访问结构体成员。(结构体再解释)
->:箭头操作符用来访问结构体指针成员。
结语
可算是让我写完了,虽然有操作符真的是太多了,本来还想把关键字也加进去,但是这样感觉内容就比较杂乱,所以还是下次再写吧。写了四个小时,可能有些地方因为太疲惫了,没写对还请各位看到的大佬提醒一哈,溜了~干饭。