文章目录
一、算数操作符
+ - * / %
- / 商
除法想得到小数的结果,必须保证除数和被除数中至少有一个小数(浮点数)。 - % 余数
两个操作数必须为整数,返回的是整除之后的余数。
二、移位操作符
移位操作符移动的是补码
<< 左移操作符
>> 右移操作符
移位操作符移动的是二进制位
移位操作符的操作数只能为整数。
1、二进制位
- 二进制的表示:原码、补码、反码。
最高位是符号位-----0为正,1为负。
正整数的原码、补码、反码相同。 - 原码、反码、补码的关系
原码—>反码:原码符号位不变,其他位按位取反。
反码—>补码:反码的基础上二进制加一。
数字在内存中的形式是补码。
-15
10000000000000000000000000001111 原码
11111111111111111111111111110000 反码
11111111111111111111111111110001 补码
2、左移操作符
左边丢弃,右边补零 —> 扩大2倍
3、右移操作符
- 逻辑右移
右边丢弃,左边补零 - 算数右移
右边丢弃,左边补原符号位(绝大部分编辑器使用)
不能移动负数位
例:num >> -1;(负一就是负号位)
三、位操作符
& 按位与
| 按位或
^ 按位异或
注:他们的操作数必须为整数。
- & 按位与 —> 有0为0,同为1则为1
- | 按位或 —> 有1为1,同为0则为0
- ^ 按位异或 —> 相同为0,相异为1
三者都是二进制位进行比较
四、赋值操作符
=
可以给变量重新赋值
- 复合操作符
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=
这样写使代码更加简洁
五、单目操作符
1、单目操作符介绍
! 逻辑反操作
- 负值
- 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
- 间接访问操作符(解引用操作符)
(类型) 强制类型转换
2、sizeof与数组
- sizeof可以求变量(类型)所占空间的大小
- %zu 用来打印sizeof的值,单位为字节
- 数组名:数组名是数组首元素的地址
两个例外:
1. sizeof(数组名),数组名表示整个数组,不是首元素的地址
sizeof(数组名),计算的是整个数组的大小,单位是字节
2. &数组名,数组名表示整个数组,不是首元素地址,取出的是整个数组的地址
3、++、–类型
- 前置++,先++,后使用
- 后置++,先使用,后++
-----> --类型,同理
4、强制转化
int main
{
int a = (int) 3.14;//a=3
}
强制类型转换可能会造成数据的丢失
六、关系操作符
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
注:1、在编程的过程中== 和=不小心写错
int main
{
if( 10 == a) //当赋值时建议数在前,变量在后
}
2、 ==不能比较2个字符串的内容,实际上比较2个字符串的首字符地址
七、逻辑操作符
&& 逻辑与
|| 逻辑或
- && 当前面的条件为假,则不执行判断第二个条件
- || 当前面条件为真,则不执行判断第二个条件
八、条件操作符(三目操作符)
exp1 ? exp2 : exp3
- 当表达式1为真时,结果为表达式2
- 当表达式1为假时,结果为表达式3
九、逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果
十、 下标引用、函数调用和结构成员
1、 [ ] 下标引用操作符
操作数:一个数组名 + 一个索引值
int arr[10];//创建数组
arr[9] = 10;//实用下标引用操作符。
[ ]的两个操作数是arr和9。
2、 ( ) 函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
#include <stdio.h>
void test1()
{
printf("hehe\n");
}
void test2(const char *str)
{
printf("%s\n", str);
}
int main()
{
test1(); //实用()作为函数调用操作符。
test2("hello bit.");//实用()作为函数调用操作符。
return 0;
}
3、访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名