C语言中操作符详解(中)

C语言中操作符详解中

放在最前面的

🎈 🎈 我的CSDN主页 :OTWOL的主页,欢迎!!!👋🏼👋🏼

🎉🎉我的C语言初阶合集C语言初阶合集,希望能帮到你!!!😍 😍

👋🏼🎉🎊创作不易,欢迎大家留言、点赞加收藏!!! 🥳😁😍

1、操作数(Operands)

操作数 是 操作符作用的对象。
在C语言中,操作数可以是常量、变量、表达式的值等。
操作数 通常位于 操作符 的 左侧 或 右侧(或两者都是,对于二元操作符而言)。

2、单目操作符

单目操作符的特点是只有⼀个操作数。

2.1、分类

序号 单目操作符 符号 解释
1 逻辑反操作符
2 ++ 前置与后置自增操作符
3 - - 前置与后置自减操作符
4 & 取地址操作符
5 * 解引用操作符
6 + 正值操作符
7 - 负值操作符
8 ~ 按位(二进制位)取反操作符
9 sizeof 类型长度计算操作符
10 (类型) 强制类型转换操作符

2.2、举例分析(上代码)

(1)逻辑反操作符 !

补充:

在C语言中,进行判断时,数字0 表示假,非0 的数字表示真。

c 复制代码
//逻辑反操作符 !
//作用:对操作数的逻辑值取反。如果操作数为真(非0),则结果为假(0);
//如果操作数为假(0),则结果为真(1)。

int a = 5;
int ret = !a; // ret 的值为 0,因为 5 为真,取反后为假(0)
printf("%d\n",ret);

输出结果
(2)前置与后置自增操作符(++) 和 前置与后置自减操作符( - -)

c 复制代码
//作用:使变量的值增加或减少1。
//前置操作符(++var 或 --var)先改变变量的值,然后返回改变后的值;
//后置操作符(var++ 或 var--)先返回变量的原始值,然后改变变量的值。

#include<stdio.h>

int main()
{
	int a = 10;
	int b = ++a; // b 的值为 11,a 的值也变为 11(前置自增)
	int c = a--; // c 的值为 11,但随后 a 的值变为 10(后置自减)
	//输出
	printf("b = %d\n", b);
	printf("c = %d\n", c);

	return 0;
}

输出结果

(3)取地址操作符 &

c 复制代码
//作用:获取变量的内存地址。

#include<stdio.h>

int main()
{
	int a = 10;
	int* pa = &a; // 指针pa 存储了变量 a 的内存地址
	//输出
	//%p  是以十六进制数的形式打印地址(内存单元编号)
	printf("%p\n", &a);
	printf("%p\n", pa);

	return 0;
}

输出结果

(4)解引用操作符(*)

c 复制代码
//作用:通过指针获取其指向的变量的值。

#include<stdio.h>

int main()
{
	int a = 10;
	int* p = &a;
	int b = *p; // b 的值为 10,即变量 a 的值
	//输出
	printf("b = %d\n", b);

	return 0;
}

输出结果
(5)正负值操作符(+、-)

c 复制代码
//作用:用于表示数值的正负。
// 正号(+)通常可以省略,因为它不改变数值;
// 负号(-)则用于将数值变为相反数。

#include<stdio.h>

int main()
{
	int num = 10;
	int a = +num; // a 的值为 10,正号不改变数值
	int b = -num; // b 的值为 -10,取相反数
	//输出
	printf("a = %d\n", a);
	printf("b = %d\n", b);

	return 0;
}

输出结果
(6)按位取反操作符(~)

c 复制代码
//作用:对操作数的二进制表示进行按位取反(即0变为1,1变为0)。

#include<stdio.h>

int main()
{
	int a = 0;
	int ret = ~a; // 对于 a 的二进制表示(全为0),取反后全为1,即 -1(在补码表示下)
	printf("%d\n", ret); // 输出 -1

	return 0;
}

输出结果
(7)类型长度计算操作符(sizeof)

c 复制代码
//作用:计算变量或数据类型所占的内存大小(以字节为单位)。

#include<stdio.h>

int main()
{
	int a = 10;
	// sizeof 计算 变量或数据类型所占的内存大小 返回值是 大于等于 0的数
	// %zd 是无符号的占位符(格式控制符) 
	// %u 也是
	printf("%zd\n", sizeof(a)); // 输出 a 所占的字节数,通常为 4(取决于编译器和平台)

	return 0;

输出结果
(8)强制类型转换操作符((类型))

c 复制代码
//作用:将操作数强制转换为指定的数据类型。

#include<stdio.h>

int main()
{
	//定义一个双精度型 double 变量 pai
	double pai = 3.14;
	// P 的值为 3,因为 3.14 被强制转换为整数类型,小数部分被截断
	int p = (int)pai; 
	//输出
	printf("p = %d\n", p);

	return 0;
}

输出结果

3、关系操作符

在C语言中,关系操作符(也称为比较操作符)用于比较两个值,
并返回一个布尔值(在C语言中通常通过整数 0 或 1表示)。

这些操作符通常用于条件语句(如 if 语句)和循环语句(如 while 或 for 循环)中,以控制程序的流程。

3.1、分类

C语言中的关系操作符包括:

关系操作符 功能 及 返回值
等于 (==) 判断两个值是否相等。如果相等,返回1(真),否则返回0(假)。
不等于 (!=) 判断两个值是否不相等。如果不相等,返回1(真),否则返回0(假)。
大于 (>) 判断左边的值是否大于右边的值。如果是,返回1(真),否则返回0(假)。
小于 (<) 判断左边的值是否小于右边的值。如果是,返回1(真),否则返回0(假)。
小于等于 (<=) 判断左边的值是否小于或等于右边的值。如果是,返回1(真),否则返回0(假)。
大于等于 (>=) 判断左边的值是否大于或等于右边的值。如果是,返回1(真),否则返回0(假)。

3.2、举例分析(上代码)

c 复制代码
#include <stdio.h>

int main() 
{
    int a = 10;
    int b = 20;

    // 等于 (==)
    if (a == b) 
    {
        printf("a等于b\n");
    }

    else 
    {
        printf("a不等于b\n");
    }

    // 不等于 (!=)
    if (a != b) {
        printf("a不等于b\n");
    }

    // 大于 (>)
    if (a > b) 
    {
        printf("a大于b\n");
    }
    else 
    {
        printf("a不大于b\n");
    }

    // 小于 (<)
    if (a < b) 
    {
        printf("a小于b\n");
    }

    // 大于等于 (>=)
    if (a >= 10) 
    {
        printf("a大于等于5\n");
    }

    // 小于等于 (<=)
    if (b <= 20) 
    {
        printf("b小于等于10\n");
    }

    return 0;
}

4、逻辑操作符

在C语言中,逻辑操作符 用于根据布尔值(在C语言中,通常使用 整数 0表示假,非 0 值表示真)的逻辑关系进行运算。
这些操作符在 条件判断、循环控制 以及 位运算 等场景中都有广泛应用

4.1、分类

C语言中的逻辑操作符主要包括以下三种:

逻辑操作符 功能 及 返回值 短路特性
逻辑与(&&) 只有当两个操作数都为真(非0)时,结果才为真(1)。如果任意一个操作数为假(0),则结果为假(0)。 如果第一个操作数为假,则不会计算第二个操作数,因为结果已经确定为假。
逻辑或(两根竖线) 只要有一个操作数为真(非0),结果就为真(1)。只有当两个操作数都为假(0)时,结果才为假(0)。 如果第一个操作数为真,则不会计算第二个操作数,因为结果已经确定为真。
逻辑非(!) 对操作数的布尔值进行取反。如果操作数为真(非0),则结果为假(0);如果操作数为假(0),则结果为真(1)。
  • 逻辑或(两根竖线)(||)

4.2、举例分析(上代码)

c 复制代码
#include <stdio.h>

int main() 
{
    int x = 5;
    int y = 0;

    // 逻辑与(&&)
    if (x > 0 && y > 0) 
    {
        printf("x和y都大于0\n");
    }
    else 
    {
        printf("x或y(或两者)不大于0\n");
    }

    // 逻辑或(||)
    if (x > 0 || y > 0) 
    {
        printf("x或y(或两者)大于0\n");
    }

    // 逻辑非(!)
    if (!y) 
    {
        printf("y是0(假)\n");
    }
    else 
    {
        printf("y不是0(真)\n");
    }
    
    return 0;
}
运行结果:

5、短路特性(逻辑运算符 &&和 ||)

5.1、定义

在C语言中,逻辑运算符的短路特性 是一种优化机制,
它允许在逻辑表达式求值过程中,一旦能够确定整个表达式的最终结果,就立即停止对剩余部分的计算。
这种特性主要适用于 逻辑与(&&)和逻辑或(||)运算符。

5.2、分类

(1) 对于逻辑与运算符&&

如果第一个操作数为 假(即 等于 0),那么无论第二个操作数的值是什么,整个逻辑表达式的结果都将是假。
因此,在这种情况下,C语言编译器会"短路"掉第二个操作数的计算,因为它对最终结果没有影响。

(2) 对于逻辑或运算符 ||

如果 第一个操作数为 真(即 非 0),那么无论第二个操作数的值是什么,整个逻辑表达式的结果都将是真。
因此,在这种情况下,C语言编译器同样会"短路"掉第二个操作数的计算。

5.3、举例分析(上代码)

c 复制代码
#include <stdio.h>

int main()
{
    // 短路特性示例
    int a = 0;
    int b = 1;
    int ret1 = 0;
    int ret2 = 0;

    // 逻辑与的短路特性
    ret1 = ( (a != 0) && (a + b)); // 这里不会执行 a + b ,因为a != 0已经为假
    //输出
    printf("逻辑与 的短路结果:%d\n", ret1); // 输出0

    // 逻辑或的短路特性
    ret2 = ( (a == 0) || (a + b)); // 这里  (a + b) 不会执行,由于 a == 0为真(即 a != 0为假),
    // 但 || 只需要一个真值 , 且短路特性只跳过不必要的计算。
   
    // 正确的展示短路特性的写法应该是确保第一个条件为真时不会执行第二个可能导致错误的条件。
    // 例如:ret = (1 || (a + b) ); // 这里不会执行 (a + b),因为 1 已经为真
   
    //输出
    printf("逻辑或 的短路结果:%d\n", ret2); // 输出 1

    return 0;
}
运行结果:

END

每天都在学习的路上!
On The Way Of Learning

"哇哦😎,我们一起走过了这篇文章的旅程🚀。你觉得这篇文章对你有帮助吗😜?
有没有什么特别的感受或者想法💡想要和大家分享呢😏?
赶紧在评论区留言吧,让我们的思想在这里碰撞出火花🔥💥!"

相关推荐
禾风wyh几秒前
【Pytorch】Python random 模块
开发语言·python
每天写点bug1 分钟前
golang项目三层依赖架构,自底向上;依赖注入trpc\grpc
开发语言·架构·golang
我不是程序猿儿5 分钟前
【C++】关于使用系统库fileapi.h的readfile,及’读‘时间耗时太长的解决方案
c++·stm32·单片机
编码追梦人5 分钟前
【C++进阶实战】基于linux的天气预报系统
开发语言·c++
凭君语未可11 分钟前
讲解C语言形参与实参
c语言
single59413 分钟前
【c++笔试强训】(第五篇)
java·开发语言·c++·vscode·学习·算法·牛客
袁代码14 分钟前
SwiftUI开发教程系列 - 第十二章:本地化与多语言支持
开发语言·前端·ios·swiftui·swift·ios开发
A charmer17 分钟前
【C++】list 类深度解析:探索双向链表的奇妙世界
开发语言·c++
火龙谷22 分钟前
django---tinymce编辑器
开发语言·python·django
凤枭香28 分钟前
数字图像处理(c++ opencv):彩色图像处理-彩色基础与彩色模型
开发语言·c++·图像处理·python·opencv