03-C语言-运算符与表达式

一、运算符分类

运算符类型 说明
算术运算符 用于四则运算
赋值运算符 将表达式的值赋给变量
比较运算符 用于表达式的比较,返回真或假
逻辑运算符 用于根据表达式的值返回真值或假值
位运算符 用于处理数据的位运算
sizeof运算符 计算对象的字节数长度

1.1 算术运算符

运算符 术语/说明 示例 结果
+ 正号 +3 3
- 符号 -3 -3
+ 加号 2+3 5
- 减号 5-3 2
* 乘号 2*3 6
/ 除号 10/2 5
% 取模(取余) 10%3 1
++ 前自增 a=2,b=++a a=3,b=3
++ 后自增 a=2, b=a++ ,a=3,b=2
-- 前自减 a=3,b=--a a=2,b=2
-- 后自减 a=3,b=a-- a=2,b=3

注意

  • m % n ==> m和n只能是整型
  • int / int = int
  • int / float = float ==> 将int类型转换为float类型进行计算
  • float / int = float ==> 将int类型转换为float类型进行
  • float / float = float
  • double / int = double ==> 将int类型转换为double类型进行计算
  • int / double = double ==> 将int类型转换为double类型进行计算
  • float / double = double ==> 将float类型转为double类型进行计算
  • double / float = double ==> 将float类型转为double类型进行计算
  • double / double = double

算术运算符的使用示例

#include <stdio.h>
int main(){
    printf("3 + 2 = %d\n", 3+2);
    printf("3 - 2 = %d\n", 3-2);
    printf("3 * 2 = %d\n", 3*2);
    printf("3 / 2 = %d\n", 3/2);  // 返回的是一个比真实值小的最大整数
    printf("10.0f / 3 = %f\n", 10.0f/3); // 返回真实值
    printf("10.0f / 3.0f = %f", 10.0f/3.0f);
    printf("10.0 / 3.0 = %lf", 10.0/3.0);
    int i = 10;
    int j = i++; // 使用i之后,在对i进行自增1 i = 11, j = 10
    printf("i = %d\tj = %d\n", i, j);
    j = ++i;  // 对i进行自增1之后,使用i i = 12, j = 12
    printf("i = %d\tj = %d\n", i, j);
    j = i--; // 使用i之后,在对i进行自减1 i = 11, j = 12
    printf("i = %d\tj = %d\n", i, j);
    j = --i; // 对i自减1,之后在使用i; i = 10, j =10
    printf("i = %d\tj = %d\n\n", i, j);
    return 0;
}

1.2 赋值运算符

赋值符号与算术运算符的连用

运算符 术语/说明 示例 结果
= 赋值符号 a=3,b=2, a=b a=2,b=2
+= 加等于 a=2,a+=1;a=a+1 a=3
-= 减等于 a=3, a-=2;a=a-2 a=1
*= 乘等于 a=3,a=2;a=a2 a=6
/= 除等于 a=6,a/=3;a=a/3 a=2
%= 模等于 a=10,a%=3;a=a%3 a=1
#include <stdio.h>
int main(){
    int c1;
    c1 = 10; // 将10赋值给c1
    printf("c1 = %d\n", c1);
    c1 += 1;  // c1 = c1 + 1
    printf("c1 += 1 -> c1 = %d\n", c1);
    c1 -= 1;  // c1 = c1 -1
    printf("c1 -= 1 -> c1 = %d\n", c1);
    c1 *= 2;  // c1 = c1 * 2
    printf("c1 *= 2 -> c1 = %d\n", c1);
    c1 /= 2;  // c1 = c1 /2
    printf("c1 /= 2 -> c1 = %d\n", c1);
    c1 %= 3; // c1 = c1 % 3
    printf("c1 %%= 3 -> c1 = %d\n", c1);
    return 0;
}

1.3 比较运算符

比较运算中,返回一个_Bool类型的数据,这是C99标准中添加的类型。即逻辑值true和false。因为C语言用值1表示true,值0表示false,所以_Bool类型实际上也是一种整数 类型。但原则上它仅占用1位存储空间,因为对0和1而言,1位的存储空间足够了

运算符 术语/说明 示例 结果
== 相等于 4 == 3 0
!= 不等于 4 != 3 1
< 小于 4 < 3 0
> 大于 4 > 3 1
<= 小于等于 4 <= 3 0
>= 大于等于 4 >= 1 1

1.4 逻辑运算符

运算符 术语/说明 示例 结果
! \neg !a 如果a为假,则!a为真.如果a为真,则!a为假
&& \land a && b 如果a和b都为真,则结果为真,否则为假
|| \vee a||b 如果a或b有一个为真,则结果为真,二者都为假时,结果为假

比较运算符和逻辑运算符示例

#include <stdio.h>
int main(){
    _Bool x1=0;
    _Bool x2=1;
    printf("!0 = %d\n", !x1);
    printf("!1 = %d\n", !x2);
    printf("1 && 1 = %d\n", x2 && x2);
    printf("1 && 0 = %d\n", x2 && x1);
    printf("0 && 0 = %d\n", x1 && x1);
    printf("1 || 0 = %d\n", x2 || x1);
    printf("1 || 1 = %d\n", x2 || x2);
    printf("0 || 0 = %d\n", x1 || x1);
    return 0;
}

1.5 位运算符

运算符 中文名称 功能描述
& 按位与 (m&n)参与运算的m、n,如果相应位数都为1,则结果为1
| 按位或 (m|n)参与运算的m、n,如果相应为数只要有一个1则为1
^ 按位异或 (m^n)参与运算的m、n,如果对应位数不同时,结果为1
~ 按位取反 (~m)将m的二进制数+1后乘-1,~m=-(m+1)
>> 右移动 (m >> n)将m的二进制位全部右移n为,低位丢弃高位补0
<< 左移动 (m << n)将m的二进制位全部左移n为,高位丢弃低位补0

位运算符使用示例

#include <stdio.h>
int main(){
    printf("10u & 9u = %d\n", 10u & 9u); // 10u & 9u = 8
    printf("10u | 9u = %d\n", 10u | 9u); // 10u | 9u = 11
    printf("10u ^ 9u = %d\n", 10u ^ 9u);  // 10u ^ 9u = 3
    printf("~10u = %d\n", ~10u);  // ~10u = -11
    printf("10u << 2 = % d\n", 10 << 2);  // 10u << 2 =  40
    printf("10u >> 2 = %d\n", 10 >> 2);  // 10u >> 2 = 2
    return 0;
}

1.6 运算符的优先级

运算符的优先级

1.7 类型转换

1.7.1 隐式转换

#include <stdio.h>

int main()
{
    int num = 5;
    printf("s1=%d\n", num / 2);
    printf("s2=%lf\n", num / 2.0);
    return 0;
}

1.7.2 强制类型转化

强制类型转换指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,其基本语法格式如下所示:
(类型) (表达式或变量)

#include <stdio.h>

int main()
{
    float x = 0;
    int i = 0;
    x = 3.6f;
    i = x;  //x为实型, i为整型,直接赋值会有警告
    i = (int)x;  //使用强制类型转换
    printf("x=%f, i=%d\n", x, i);
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容