c语言操作符重载的教程(第四节C语言基础)(1)

一、逗号操作符

1.1 它可以用来连接两个不同的表达式 形成一个复杂的表达式;

1.2 使用 ,操作符编写的表达式结果是其中一个表达式的结果;

1.3 它的优先级非常低, 比赋值操作符低;

num = 2 5, 8 - 1;

结果: num = 7

二、赋值操作符

2.1 可以在一条语句中使用多个赋值操作符, 会先计算右边的赋值操作符;

2.2 赋值操作符本身可以当数字使用, 这个数字就是赋值完成后左边存储区里的数字;

2.3 绝大多数运算操作可以与赋值操作符构成复合赋值操作符, 例如: /= , -= 等;

2.4 任何操作符和赋值操作符合并后优先级都降低且与赋值操作符一样;

三、布尔值:

3.1 有 真(true), 假(false)两种, 计算机里使用1表示真, 0表示假;

3.2 c语言可以把任何一个整数当成布尔值, 非0为真;

四、自增操作符

4.1 自增操作符( ): 可以把一个存储区里的内容做加一操作;

c语言操作符重载的教程(第四节C语言基础)(2)

五、自减操作符

5.1 自减操作符(--): 可以把一个存储区里的内容做减一操作;

不要在一条语句中对同个存储区多次进行自增或自减计算, 结果不确定

c语言操作符重载的教程(第四节C语言基础)(3)

六、逻辑操作符

6.1 逻辑表达式计算的结果只能是布尔值

6.2 双目逻辑操作符包括: ==(等于), !=(不等于), >(大于), <(小于), >=(大于等于), <=(小于等于);

6.3 单目逻辑操作符 '!' : 它表示求反操作符

例:

printf("%d\n", !9);

结果: 0

6.4 逻辑表达式优先级比算术操作符优先级低

例:

printf("%d\n", 1 2 > 4 5);

结果: 0

6.5 以上逻辑操作符只能编写包含单个双目逻辑操作符的表达式

例:

printf("%d\n", 3 < 7 < 5);

结果: 1

6.6 与(&&)和或(||)可以用来连接两个简单逻辑表达式构成复杂表达式;

6.7 使用或(||)构成的逻辑表达式, 只要有一个简单逻辑表达式的计算结果是假则整个的结果就是假, 简单逻辑表达式的结果都是真时结果才是真

6.8 使用与(&&)构成的逻辑表达式, 只要有一个简单逻辑表达式的计算结果是真则整个的结果就是真, 简单逻辑表达式的结果都是假时结果才是假

例:

printf("%d\n", 3 < 7 && 7 < 5);

结果: 0

6.9 逻辑操作符具有短路特征, 即确定结果后,后面的表达式不再计算

例:

int num = 10;

0 && num; //0 与 任何数 结果都是0, 故num没有做 操作

printf("%d\n", num)

1 || num; //1 或 任何数 结果都是1, 故num没有做 操作

printf("%d\n", num)

结果:

10

10

七、位操作符

7.1 按位与(&), 按位或(|), 按位异或(^)

7.2 首先把两个数字都转换成二进制补码, 然后把他们对应数位上的数字进行计算;

c语言操作符重载的教程(第四节C语言基础)(4)

八、移位操作符

8.1 移位操作符可以把一个数字的所有二进制数位统一向左或者向右移动n个位置;

8.2 左移操作使用<<表示, 右移操作使用>>表示;

8.3 写在移位操作符左边的数字是将要进行移位操作的数字, 写在右边的数字是移动的位数;

8.4 移位操作不会修改任何存储区里的内容;

例:

int num = 10;

num << 2;

结果:

num = 10

8.5 如果在移位过程中没有丢失有效数据位, 则左移n位相当于乘以2的n次方, 右移n位相当于除以2的n次方;

8.6 左移时右边会出现空位置, 这些位置上要填充0, 无符号数据右移时左边补充0, 有符号数据右移时左边补充符号位;

例:

int num = 10;

printf("%d\n", num << 2);

结果:

40 = 10 * 2^2

--------------------------------

例:

char ch = 200;

printf("%hhd", ch >> 2);

结果:

-14

练习:

一个字节占8位, 把数字7放进一个字节的前4位, 把数字5放进一个字节的后四位:

char ch = 0;

ch |= 5;

ch |= (7 << 4);

九、其他操作符:

9.1 ~操作符: 它可以对字节中的所有二进制数位逐个求反, 这个操作符叫做按位求反;

9.2 &操作符: 可以获得一个变量对应存储区的地址, 必须和存储区使用, 可以使用%p作为占位符把地址数据打印出来;

int num = 0;

printf("%p", &num);

9.3 *操作符: 可以根据地址数据找到对应的存储区;

int num = 0;

*(&num) = 10;

计算机中为每个字节分配一个地址, 一个存储区是由多个相信字节拼凑的, 存储区的地址是其中最前边字节的地址(这个字节的地址最小);

十、三目表达式:

10.1 格式: 布尔值 ? 表达式1 : 表达式2

10.2 如果布尔值为真则采用前面的表达式进行计算, 否则采用后面的表达式进行计算;

练习:求一个数的绝对值

int num = 6;

num = (num >= 0 ? num : 0 - num)

printf("%d\n", num);

结果:6

下面是网上总结的 操作符优先级

c语言操作符重载的教程(第四节C语言基础)(5)

c语言操作符重载的教程(第四节C语言基础)(6)

,