算术操作符
+ - * / %
%只能用于整数
/号两边如果有一个浮点数则执行浮点数除法,否则执行整数除法
原码、反码、补码
对于整型来说:数据存放内存中其实存放的是补码。
正的整数的原码、反码、补码相同
负的整数的原码、反码、补码不同,需要计算
负的反码:原码的符号位不变,其他位按位取反就是反码
负的补码:反码的基础上+1
位移操作符
<< 左移操作符
>> 右移操作符
左移操作符:左边抛弃,右边补0
右移操作符:
1、逻辑位移:左边用0填充,右边抛弃
2、算术位移:左边用原来的表示正负符号填充,右边抛弃(最左边的第一位数是0表示正数、1表示负数)
不同的编译器会选择其中的一个方法进行右移操作符运算,通常采用第二个
位操作符
&(与):同为1才为1,否则为0
|(或):有1就为1
^(异或):不同为1,否则为0
注:他们的操作数必须是整数。
都是对数据的补码进行以上操作
不用临时变量进行两个变量的交换
#include <stdio.h>
int main()
{
int a = 10;
int b = 5;
printf("a=%d b=%d\n", a, b);
//3 ^ 3 =0 , 0 ^ 5 = 5
a = a ^ b;
b = a ^ b;//把上面的a带进去即a^b^b > a^0
a = a ^ b;//同理,b带入即 a^a^b > 0^b
printf("a=%d b=%d\n", a, b);
return 0;
}
赋值操作符
在定义了一个变量的值后又重新为他赋的新值
int a = 10;
a = 20;//赋值
复合赋值符
+= -= *= /= %=
>>= <<= &= |= ^=
即 a = a (对应的操作符) 1
单目操作符
只能作用与一个对象的数
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
关系操作符
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
逻辑操作符
&& 逻辑与 从左往右,其中有一个为假则为假,后面的不用运算了
|| 逻辑或 从左往右,其中一个为真则为真,后面的不用运算了
条件操作符
exp1 ? exp2 : exp3
(判断条件) (条件成立时运行的) (条件不成立时运行的)
逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名