C语言:操作符总结

(1)算术操作符
+
-
*
/
%
1>除了%操作符外,其他的几个操作符可以用于整数和浮点型;
2>/操作符的两个从操作符均为整型时,它执行整除运算;在其他情况下,它执行浮点数除法;
3>%为取模操作符,得到的结果是余数。

(2)移位操作符

<< 左移操作符 <规则:左边抛弃,右边补0>
>>右移操作符
逻辑移位:左边补0,右边抛弃(无符号值都是用逻辑移位,有符号则不确定)
算术移位:左边用原来的符号位补充,右边丢弃(C语言中都是算术移位)
注:两个操作数必须都是整型类型

警告:不要移动负数
例:a << -5
这属于未定义行为,结果无法预测

(3)位操作符

& 按位与
| 按位或
^ 按位异或(可以用于检查一组数中未成对的数字,异或两次相当于没有异或)
注:它们的操作数必须为整数

(4)赋值操作符

赋值用 ‘=’ 进行 例:a = 3;
赋值是表达式的一种,而不是某种类型的语句;

复合操作符
+= a+=2 -> a=a+2(下同)
-=
*=
/=
%=
&=
|=
^=
>>=
<<=
这样书写的优点:是源代码更容易阅读好书写且效率更高

(5)单目操作符

! 逻辑反操作(得到的结果表示:真 or 假 1表示真 0表示假)
- 负值
+ 正值
& 取地址
~ 按位取反 对操作数进行求补操作,原先1的位变为0,原先0的位变为1.
– 前置、后置–
++ 前置、后置++
* 间接访问操作符(解引用操作符) 与指针一起使用,用于访问指针所指向的值
(类型) 强制转换类型,它用于显示地把表达式的值转换为另外的类型(优先级很高)
1>如果把一个内存空间少的变量赋值给一个内存空间多的变量,这个过程会在高位补一些数据,和符号位相关;
2>如果把一个内存空间多的变量赋值给一个内存空间少的变量,这个过程会发生截断;
3>对于以上规则,隐式类型转换和强制类型转换都遵守。

sizeof 操作数的类型长度(在编译过程中求值,不访问内存)
例:int arr[10]={0};
pritf("%d",sizeof(arr[10]);此时看起来像是数组下标越界,其实并没有,根本没有访问内存,何来越界一说呢!
数组下标越界的本质:内存访问越界,访问了非法内存,然而这里的内存访问的动作是在运行时完成的,所以此时在编译过程中求值,sizeof不涉及到内存,更涉及不到越界。

(6)关系操作符

	>
	>=
	<
	<=
	!=            用于测试“不相等”
	==            用于测试“相等”

注:关系运算符的返回值为1或0

(7)逻辑操作符

&& 逻辑与(一假即假)
|| 逻辑或(一真即真)

短路求值
对于逻辑与操作来说:如果左侧表达式值为0,则不会对右侧表达式求值
对于逻辑或操作来说:如果左侧表达式值为1,则不会对右侧表达式求值

(8)条件操作符

exp1 ? exp2 : exp3 ( exp1成立则输出exp2,否则输出exp3)

三目运算符优先级最低,在书写是尽量加括号

(9)逗号表达式

exp1,exp2,exp3,exp4…
逗号表达式从左向右执行,整个表达式的结果是最后一个表达式的结果。

(10)下标引用、函数调用和结构成员

1> [ ]下标引用操作符
操作数:一个数组名 + 一个索引值
2> ()函数调用操作符接受一个或多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3> 访问一个结构体成员
. 结构体. 成员名
->结构体指针 -> 成员名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值