本文中是笔者初学C语言的记录笔记。
文章目录
- 算数操作符
- 移位操作符
- 位操作符
- 赋值操作符
- 单目操作符
- 关系操作符
- 逻辑操作符
- 条件操作符
- 逗号操作符
- 下标引用,函数调用和结构成员操作符
前言
提示:这篇文章我们将学会
1,各种操作符的介绍
2,表达式求值
一、算数操作符
+ - * / % |
+ - *都是很常见的
介绍一下 / 和 %
/:正常执行的是整数除法3/2=1 。如果想执行小数除法在 / 的两边的的数其中至少有一个应该是小数。
%:取模运算,就是前面那个数除以后面那个数的余数, 3 % 2 = 1.。注意%的两个操作数必须是整型,不能是浮点型。它运算的结果是有范围的。0到后面那个数减一。
二、移位操作符
<<左移操作符
>> 右移操作符
注:移位操作符都是操作的补码。
注:移位操作符的操作数只能是整数。
注:符号位就丢了
<<左移操作符::
计算规则:左边丢弃,右边补零(num丢了符号位)
举例:5<<1 = 10; 5<<2 = 20;------5<<n = 5*2^n
-5 << 1 = -10; -5 << 2 = -20;-------5<<n = -5*2^n
>> 右移操作符
计算规则:(到底是逻辑右移还是算数右移是取决于编译器)
1. 逻辑移位 :左边用0填充,右边丢弃。
2. 算术移位: 左边用原该值的符号位填充,右边丢弃。
vs编译器采用的是的算数右移。
警告:
对于移位运算符,不要移动负数位,这个是标准未定义的。
例如
拓展:二进制
二进制有三种表述形式:源码,反码,补码。
正数的源码,反码,补码是相同的。
负数的源码,反码,补码是要计算的。
整型的数在内存中存储的是补码二进制。
拓展:二进制的运算:
源码------(符号位不变其他位置按位取反得到)------>反码------(反码加一)---->补码
补码---- (补码减一)----------> 反码---------(符号位不变其他位按位取反)------>源码
注意:补码--------(符号位不变其他位按位取反)---------(加一)--------> 源码
三:位操作符
& --按位与(于&取地址的符号相同但是操作数不一样,一个是a&b,一个是&a)
| --按位或
^ --按位异或
注:这里的位是二进制位,比较的都是补码。
注:他们的操作数必须是整数。不能是浮点数。
& --按位与
对应的二进制位只要有0那与的结果就是 0 ,只有两个同时位1的时候才是 1 。
| --按位或
对应的二进制只要有 1 就是 1 ,只有两个都为 0 的时候才是 0 。
^ --按位异或
对应的二进制位 相同位0,相异位1
异或的特殊操作:a^a=0; 0^a=a; -------
练习
一,不能创建临时变量,实现两个数的交换
法二:
二,求一个整数存储在内存中的二进制中1的个数
四:赋值操作符
“=” 它可以给一个变量重新赋上一个新的值。 也可以连续赋值
先赋值x再赋值a。
复合赋值
+= -= *= /= %= >>= <<= &= |= ^=
五:单目操作符
“ ! ”:逻辑反操作,
可以把假变成真,把真变成假。
例如
在C语言中0表示假 非0表示真。
在c99之前没有表示真假的变量类型,在c99中引入了布尔类型。(使用时需要头文件<stdbool.h>)
"&"取地址操作符
取出某某某在内存中的地址。不仅可以取变量的地址,也可以取数组的地址,只要他在内存中开辟了空间他就可以取地址。
” * “ 间接访问操作符(解引用操作符)
sizeof 操作数的类型长度(以字节为单位)
sizeof不是函数,是操作符,求操作数 在内存中占的内存的大小。
sizeof和数组
” ~ “ 对一个数的二进制按位取反
对一个数的二进制补码按位取反。
六:关系操作符
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
注意:两个字符串不能用“==”来比较,应该用strcmp库函数(<string.h>)是专门用来比较两个字符串的大小的,对应位置上字符的大小,不是比较长度。
例如:abc小于abd,比较的是ASCLL码值。从前向后挨个比较,遇到不同的就比较出来了比较ascll值。
七:逻辑与逻辑或
&& 逻辑与
|| 逻辑或
&&逻辑与就是两个操作数都要满足条件才是真
||只要有一个满足就是真
练习
八:条件操作符
exp1 ? exp2 : exp3
表达式1为真,执行表达式2。
表达式1为假,执行表达式3。
九:逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
练习1
练习2
十:下标引用,函数调用和结构成员
“ [ ] ” :下标引用操作符,
两个操作数,一个是函数名,另一个是索引值。
“ () ”:函数调用操作符
结构成员访问
” . “:结构体.成员名 //结构体访问操作符
” -> “: 结构体指针->成员名
打印结构体成员的值
修改结构体成员的值
以上就是C语言中所有的操作符!!!!!
注意都要掌握!!!!!