一文彻底搞清楚C语言的运算符

简介: 本文详细介绍了C语言中的各类运算符,包括算术、关系、逻辑、位运算符、赋值、三目运算符及sizeof,帮助读者深入理解其用法与特性。君志所向,一往无前,希望在成长的路上有你相伴!

程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java、鸿蒙、嵌入式、人工智能等开发,专注于程序员成长的那点儿事,希望在成长的路上有你相伴!君志所向,一往无前!


运算符

1.算术运算符

主要用于基本的数学运算,包括:

加法运算符(+):用于求两个数的和。

减法运算符(-):一是用于求两个数的差。

乘法运算符(*):实现两个数的乘法运算,同样适用于不同数值类型的乘法计算。

除法运算符(/):当用于两个整数相除时,结果取整(舍去小数部分),
若除数或被除数至少有一个是浮点数时,则进行正常的浮点数除法运算,得到带有小数的结果。

求余运算符(%):也叫取模运算符,用于求两个整数相除的余数,运算符的操作数必须为整数。

void f1(void)
{
    //算术运算符 + - * / %
    int num1=9;
    int num2=2;
    printf("求和:num1+num2=%d\n",num1+num2);
    printf("求差:num1-num2=%d\n",num1-num2);
    printf("求积:num1*num2=%d\n",num1*num2);
    printf("求商:num1/num2=%d\n",num1/num2);
    printf("求余:num1%%num2=%d\n",num1%num2);
}
AI 代码解读

2.关系运算符

用来比较两个值之间的关系,运算结果是布尔值(真或假,在 C 语言中用 1 表示真,0 表示假),包含:

等于运算符(==):判断两个操作数是否相等。注意与赋值运算符 “=” 区分开。

不等于运算符(!=):判断两个操作数是否不相等。

大于运算符(>):判断左边的操作数是否大于右边的操作数。

小于运算符(<):判断左边操作数是否小于右边操作数。

大于等于运算符(>=):判断左边操作数是否大于等于右边操作数。

小于等于运算符(<=):判断左边操作数是否小于等于右边操作数。

void f2(void)
{
    //关系运算符 > < >= <= == !=
    int num1=13;
    int num2=9;
    printf("大于:num1>num2=%d\n",num1>num2);
    printf("小于:num1<num2=%d\n",num1<num2);
    printf("大于等于:num1>=num2=%d\n",num1>=num2);
    printf("小于等于:num1<=num2=%d\n",num1<=num2);
    printf("相等:num1==num2=%d\n",num1==num2);
    printf("不等于:num1!=num2=%d\n",num1!=num2);

}
AI 代码解读

3.逻辑运算符

用于对布尔值进行逻辑运算,结果同样为布尔值,包括以下:

逻辑与运算符(&&):只有当两个操作数的值都为真(1)时,整个逻辑表达式的值才为真(1);只要有一个操作数为假(0),表达式的值就为假(0)。并且它具有短路特性,当计算到第一个操作数为假时,就不会再计算第二个操作数了。

逻辑或运算符(||):只要两个操作数中有一个为真(1),整个逻辑表达式的值就为真(1);只有当两个操作数都为假(0)时,表达式的值才为假(0)。它也有短路特性,当计算到第一个操作数为真时,就不会再计算第二个操作数了。

逻辑非运算符(!):用于对一个布尔值取反,若操作数为真(1),则取反后为假(0);若操作数为假(0),则取反后为真(1)。

void f3(void)
{
    //逻辑运算符 && || !
    int num1=13;
    int num2=9;
    printf("逻辑与:num1&&num2=%d\n",num1&&num2);
    printf("逻辑或:num1||num2=%d\n",num1||num2);
    printf("逻辑非:!num1=%d\n",!num1);
}
AI 代码解读

4.位运算符

对整数在二进制位级别上进行操作,主要包括:

按位与运算符(&):将两个整数对应的二进制位进行与运算,只有当两个对应位都为 1 时,结果位才为 1,否则为 0。

按位或运算符(|):把两个整数对应的二进制位进行或运算,只要两个对应位中有一个为 1,结果位就为 1。

按位异或运算符(^):对两个整数对应的二进制位进行异或运算,当两个对应位不同时,结果位为 1,相同时结果位为 0。

取反运算符(~):对一个整数的二进制位进行取反操作,即 0 变为 1,1 变为 0。

左移运算符(<<):将一个整数的二进制位向左移动指定的位数,右边空出的位用 0 填充。

右移运算符(>>):把一个整数的二进制位向右移动指定的位数,对于无符号数,左边空出的位用 0 填充;对于有符号数,如果是正数,左边空出的位用 0 填充,若是负数,左边空出的位用符号位(最高位)填充。


void f4(void)
{
    //位运算符
    int num1=13;
    int num2=9;
    printf("位与:num1&num2=%d\n",num1&num2);
    printf("位或:num1|num2=%d\n",num1|num2);
    printf("位异或:num1^num2=%d\n",num1^num2);
    printf("位取反:~num1=%d\n",~num1);

}
AI 代码解读

5.赋值运算符

用于给变量赋值,包括:

最基本的是简单赋值运算符 “=”。

除此之外,还有复合赋值运算符:

加赋值运算符(+=)

减赋值运算符(-=)

乘赋值运算符(*=)

除赋值运算符(/=)

求余赋值运算符(%=)

左移赋值运算符(<<=)

右移赋值运算符(>>=)

按位与赋值运算符(&=)

按位或赋值运算符(|=)

按位异或赋值运算符(^=)

void f5(void)
{
    //赋值运算符 = += -= *= /= %=
    int num1=13;
    int num2=9;
    printf("赋值:num1=num2=%d\n",num1=num2);
    printf("加法:num1+=num2=%d\n",num1+=num2);
    printf("减法:num1-=num2=%d\n",num1-=num2);
}
AI 代码解读

6.三目运算符

也叫 条件运算符

语法格式为 表达式1? 表达式2 : 表达式3。

流程:先计算 表达式1 的值,如果其值为真(非 0),则整个条件表达式的值取 表达式2 的值;如果 表达式1 的值为假(0),则整个条件表达式的值取 表达式3 的值。

void f6(void)
{
    //三目运算符
    int num1=13;
    int num2=9;
    printf("三目运算:num1>num2?num1:num2=%d\n",num1>num2?num1:num2);
}
AI 代码解读

7.sizeof

sizeof 是 C 语言中的运算符,它属于单目运算符,用于获取数据类型或者变量所占用的字节数。

用于数据类型:

sizeof(数据类型),例如 sizeof(int),会返回 int 类型在当前编译环境下所占用的字节数。

在常见的 32 位编译环境中,sizeof(int) 的值通常为 4 字节;在 64 位编译环境下,有的编译器中 int 类型仍占 4 字节,不过这会因编译器和系统不同而有差异。

用于变量:

sizeof(变量名),比如已经定义了 int num; ,那么 sizeof(num) 就会返回变量 num 所占用的字节数,由于 num 是 int 类型,同样会返回对应编译环境下 int 类型所占用的字节数。

void f7(void)
{
    //sizeof
    printf("sizeof(int)=%d\n",sizeof(int));
    printf("sizeof(char)=%d\n",sizeof(char));
    printf("sizeof(float)=%d\n",sizeof(float));
    printf("sizeof(double)=%d\n",sizeof(double));
    printf("sizeof(long)=%d\n",sizeof(long));
    printf("sizeof(long long)=%d\n",sizeof(long long));
}
AI 代码解读

是不是 sizeof 看起来有点像函数,因为使用了括号来包含操作对象,但它本质上不是函数,有着和函数明显不同的特点:

没有函数调用开销:函数调用时在运行阶段会有入栈、出栈等一系列操作开销,而 sizeof 是编译阶段就处理好的,不存在这样的运行时开销。

参数使用不同:函数的参数有实际的传值、传址等概念,并且参数类型需要严格匹配函数定义的参数类型要求等;而 sizeof 只是获取操作对象类型的字节数,操作对象可以是类型,也可以是变量,使用起来更灵活简单,不需要遵循函数参数那样严格的规则。

本篇就到这里啦,运算符还是很重要的哈,所以本篇记得那下哈!

目录
打赏
0
0
1
0
50
分享
相关文章
【c语言】运算符汇总(万字解析)
今天博主跟大家分享了c语言中各种操作符的功能、使用方法以及优先级和结合性,并且与大家深入探讨了表达式求值的两个重要规则--算数转换和整形提升。学习这些知识对我们的C语言和C++学习都有着极大的帮助。
244 2
C语言数据类型、变量和运算符以及printf相关问题
C语言数据类型、变量和运算符以及printf相关问题
C语言判断和运算符联系
在 C 语言中,判断与运算符紧密相关,主要体现在条件表达式的使用上。
234 87
|
4月前
|
【C语言】条件运算符详解 - 《 A ? B : C 》
条件运算符(也称为三元运算符)是C语言中唯一的三元运算符。它通常用于替代简单的 `if-else` 语句。
256 6
C语言运算符的使用注意点
在C语言中,正确使用运算符能提升代码的可读性和效率。本文介绍了八大注意事项:运算符优先级和结合性影响运算顺序;自增/自减运算符分前缀和后缀形式;逻辑运算符有短路特性;位运算符直接操作二进制位需谨慎;条件运算符简洁但避免复杂嵌套;类型转换避免意外结果;使用括号明确运算顺序。掌握这些要点有助于编写更安全高效的代码。
287 72
|
5月前
|
c语言运算符
C的运算符有以下几种: 算术运算符:+、-、*、/、% 结合方向自左向右 关系运算符:>、<、==、>=、<=、!= 逻辑运算符:!、&&、|| 位运算符<<、>>、~、|、^、& 赋值运算符:=及符号扩展赋值运算符(+=、-=、*=、/=) 条件运算符:? : 逗号运算符:, 指针运算符:*、& 求字节运算符:sizeof 强制类型转换运算符:((类型)) 分量运算符:.、-> 下标运算符:[]
59 4
|
11月前
|
C语言中的条件运算符和条件表达式详解
C语言中的条件运算符和条件表达式详解
911 0
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
75 3
C语言条件运算符详解
C语言条件运算符,也称为三元运算符,是一种简化if-else语句的表达式,形式为:条件?表达式1:表达式2。当条件为真时,计算并返回表达式1的值;否则计算并返回表达式2的值。它可用于快速实现简单的条件分支逻辑。
在C语言中,正确使用运算符能提升代码的可读性和效率
在C语言中,运算符的使用需要注意优先级、结合性、自增自减的形式、逻辑运算的短路特性、位运算的类型、条件运算的可读性、类型转换以及使用括号来明确运算顺序。掌握这些注意事项可以帮助编写出更安全和高效的代码。
122 4