当前位置: 首页 > article >正文

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

C语言中操作符详解中

  • 放在最前面的
  • 1、操作数(Operands)
  • 2、单目操作符
    • 2.1、分类
    • 2.2、举例分析(上代码)
  • 3、关系操作符
    • 3.1、分类
    • 3.2、举例分析(上代码)
  • 4、逻辑操作符
    • 4.1、分类
    • 4.2、举例分析(上代码)
        • 运行结果:
  • 5、短路特性(逻辑运算符 &&和 ||)
    • 5.1、定义
    • 5.2、分类
        • (1) 对于逻辑与运算符&&
        • (2) 对于逻辑或运算符 ||
    • 5.3、举例分析(上代码)
        • 运行结果:
  • END

放在最前面的

🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼
🎉🎉我的C语言初阶合集:C语言初阶合集,希望能帮到你!!!😍 😍
👋🏼🎉🎊创作不易,欢迎大家留言、点赞加收藏!!! 🥳😁😍

1、操作数(Operands)

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

2、单目操作符

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

2.1、分类

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

2.2、举例分析(上代码)

(1)逻辑反操作符 !

补充:

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

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

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

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

//作用:使变量的值增加或减少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)取地址操作符 &

//作用:获取变量的内存地址。

#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)解引用操作符(*)

//作用:通过指针获取其指向的变量的值。

#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)正负值操作符(+、-)

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

#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)按位取反操作符(~)

//作用:对操作数的二进制表示进行按位取反(即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)

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

#include<stdio.h>

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

	return 0;

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

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

#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、举例分析(上代码)

#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、举例分析(上代码)

#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、举例分析(上代码)

#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

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


http://www.kler.cn/a/391698.html

相关文章:

  • 【stable diffusion部署】超强AI绘画Stable Diffusion,本地部署使用教程,完全免费使用
  • 如何用WordPress和Shopify提升SEO表现?
  • 设计模式:工厂方法模式和策略模式
  • 机器学习——贝叶斯
  • 软件测试面试八股文(超详细整理)
  • jwt用户登录,网关给微服务传递用户信息,以及微服务间feign调用传递用户信息
  • 在服务器里安装2个conda
  • 气膜结构赋能旧厂区焕新,多功能运动场馆的理想选择—轻空间
  • ubuntu18.04 安装与卸载NCCL conda环境安装PaddlePaddle
  • 基于Java+SpringBoot宠物管理系统
  • Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程
  • 无人机动力测试台如何快速外接第三方传感器
  • ️️一篇快速上手 AJAX 异步前后端交互
  • 帝欧家居营收净利润大跌:以资抵债贡献较小,三大策略能否扭转?
  • Win7报错Couldn‘t switch to requested monitor resolution解决方案
  • MySQl基础----Linux下数据库的密码和数据库的存储引擎(内附 实操图和手绘图 简单易懂)
  • 新版 idea 编写 idea 插件时,启动出现 ClassNotFound
  • 【Flume实操】4 Flume 自定义 Interceptor 开发案例
  • 深度了解flink(十一) 心跳机制详解
  • jwt用户登录,网关给微服务传递用户信息,以及微服务间feign调用传递用户信息
  • 2024.11.7- Redis的主从复制集群
  • LayUI组件国际化多国语言版本脚本-下篇根据语种替换
  • idea的mapper.xml文件里写sql语句出现Tag name expected错误提示
  • hadoop健康舆情研究-计算机毕业设计源码05954
  • 【计网】实现reactor反应堆模型 --- 处理数据发回问题 ,异常处理问题
  • TTL电平是什么?