略讲操作符ヾ(●゜ⅴ゜)ノ

文章详细介绍了C语言中的各种操作符,包括算数操作符如+、-、*、/、%,位操作符如&、|、^,移位操作符<<和>>,以及赋值、单目和复合操作符。还特别提到了逻辑反操作符(!)、取模运算(%)、位移和位操作,并解释了sizeof和strlen的区别。文章通过实例解释了操作符的用法和注意事项,如类型转换和赋值运算的顺序。

今天来了解一下各类操作符

操作符

算数操作符

+        -        *        /        %

/

除法

这是正常运算

 但换成7/2时,打印出的结果竟然是3?

我第一次见到也很困惑  (・-・*)

查过后才知道:由于7和2都是整型,所以打印出来的也是整型3

要想打出3.5,就必须将7换成1.0或将2换成2.0,或者两者都换,还必须将 %d 换成 %lf (打印float类型的数据用 %lf )

 

 但是我们就想只打印3.5怎么办?

在 lf 前面加个 .1 就可以了,这里的 .1 就表示只打印小数点后一位

 %

叫做取模/取余

这里7除2余1,所以结果也是1

 移位操作符

<<  左移操作符

>>  右移操作符

注:移位操作符的操作数只能是整数。

这里的左移右移又是怎么回事呢?

且听我细细道来~

比如创建一个整型 a 

int a = 1;

一个整型 4 byte = 32 bit

将1写进32比特位的空间里,就要写32个二进制位

00000000000000000000000000000001

a 就占据了上述空间,而移位操作符就是将上述二进制序列整体移动

这里涉及二进制的计算和存储,后面会细讲,这里先卖个关子

位操作符

      //按位与

       //按位或

      //按位异或

注:他们的操作数必须是整数。

位:二进制位

赋值操作符

=        +=        -=        *=        /=        &=        ^=        |=        >>=        <<=

= 是赋值操作符

后面的都叫复合操作符

+=、-=、*=、/=

a=a+5;

就可以简化成

a+=5;

后面的同理

单目操作符

                逻辑反操作符

-                   负值

+                  正值

&                  取地址

sizeof           操作数的类型长度(以字节为单位)

~                   对一个数的二进制按位取反

--                   前置、后置--

++                 前置、后置++

*                    间接访问操作符

(类型)            强制类型转换

这里。。。什么叫单目操作符呢?

当我们使用 + 时

2 + 3

+        叫操作符

2        叫左操作数

3        右操作数

所以 + 就叫做双目操作符

只有一个操作数的操作符就是 单目操作数

逻辑反操作

C语言如何表示真假?

0表示假

非0表示真

我们创造一个变量 a 输入并打印

 这里我们输入1,因为1非0,所以正常打印应该是1

而!是逻辑反操作,能把真的变成假的,把假的变成真的,所以最后一行打印的是0;

 我们再次输入 0 ,最后一行因为 ! 打印的是1.

!的应用

我们在使用if语句时

这里插播一下:

if语句是一个条件语句

格式是

if(条件)
{...}

if(条件)

{...}

else

{...}

以及

if(条件)
{...}
else if(条件)
{...}
...
else
{...}

这里不细讲

回到上面

当我们使用if语句时

这里的  if(flag)表示如果flag为真就打印hehe

             if(flag)表示如果flag为假就打印haha

中场休息一下。。

sizeof

操作数的类型长度

这个通常是定值

变量的本质是向内存申请空间,一个内存单元是一个字节

这里的变量 a 就是向内存申请空间

int main()
{
   int a = 10;
   return 0;
}

由于 int 类型所占空间是4个字节,所以10就被储存在下面4个字节

 我们再试着打印 a 所占的空间,发现与上面的 int 类型大小一样

 

 sizeof计算变量大小时变量的括号可以省略,但计算类型是的括号不能省略

 所以证明  sizeof  不是函数操作符

这里第一个 sizeof  计算的是数组arr的总大小

第二个计算的是单个数组的大小

第三个则是数组含有元素的大小

 那么 strlen 和 sizeof 之间究竟有怎样的不同呢?

我们从这段代码入手

#include<stdio.h>
int main()
{
    char arr1[]="abc";
    char arr2[]={ 'a', 'b', 'c' };
    printf("%d\n",strlen(arr1));
    printf("%d\n",strlen(arr2));

    printf("%d\n",sizeof(arr1));
    printf("%d\n",sizeof(arr2));
    return 0;
}

先来看一下打印出来的效果

 析:

第一行计算的是代码的长度,且 \0 不被计入长度,所以结果是3

第二行由于不知道 \0 具体在哪,所以结果是随机值

第三行sizeof只关注占据内存空间的大小 arr1是 a b c \0,所以占据4个字节,打印结果就是4 

第四行中只有 a b c,打印出来的结果就是3

strlen  是库函数

strlen  是求字符串长度的,关注的字符串中是否有 \0 ,统计 \0 之前出席拿的字符个数

sizeof  是操作符

sizeof  只关注占据了多大的内存空间,不关注内存中存放的数据

sizeof  返回值的单位是字节

++、--

++的效果就是+1,--的就是-1

这里的++a的意思是先++,后使用:a+=1,a=11,将a++后的结果赋给b,所以b也等于11

 a++的意思就是先使用,再++。这里a=10,x先赋给b,再++,后变为11

 --同理

(类型)

强制类型转换

这里的3.14是double类型的,运行时会报错

 为了正常运行,又不改变前面的 int 就要对3.14进行强制类型转换

 关系操作符

>

>=

<

<=

!=        用于测试“不相等”

==        用于测试“相等”

逻辑操作符

&&        逻辑与

| |          逻辑或

&& 相当于生活中的并且

||相当于或者

都只关注真和假

下面的代码意思是 如果a与b都是真,那么打印hehe

 条件操作符(也叫三目操作符

exp1 exp2 : exp3

这个操作符的意思是:

如果表达式1为真,那么表达式2算,3不算

如果表达式1为假,那么表达式2不算,3算

应用实例

 逗号表达式

exp1 ,exp2, exp3, ...expN

逗号表达式会从左向右依次计算,但是整个表达式的结果是最后一个表达式的结果

下标引用、函数调用和结构成员

[ ]  下标引用操作符

( )  函数调用操作符

.        结构体.成员名

->       结构体指针->成员名

下标引用是应用在数组里的

这里的意思就是 打印数组里下标为7的数字

红框里的括号就是 函数调用操作符 

 结构体,较为复杂,这里只提一嘴

欧了,今天的内容也完了,东西较多,慢慢消化

内容概要:本文围绕“考虑隐私保护的分布式联邦学习电力负荷预测研究”展开,提出了一种融合联邦学习框架与隐私保护机制的电力负荷预测方法,旨在解决传统集中式数据处理中潜在的用户隐私泄露问题。通过构建分布式模型训练体系,各参与方在本地完成模型训练,仅向中心服务器上传模型参数或梯度信息,实现“数据不动模型动”的协同建模模式,确保数据“可用不可见”。研究采用Python语言实现了完整的联邦学习流程,涵盖客户端本地训练、全局模型聚合、隐私保护策(如差分隐私或同态加密)集成、通信机制设计及预测性能评估等核心模块,显著提升了电力负荷预测在隐私安全与模型精度之间的平衡能力。; 适合人群:具备Python编程基础和机器学习基础知识,从事电力系统、智能电网、能源大数据分析、数据隐私保护等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于居民或工业级电力负荷预测任务,在保障用户用电数据隐私的前提下实现高精度预测;②为构建符合数据合规要求的智慧能源管理系统提供技术支撑;③推动联邦学习在能源互联网、跨企业数据协作等场景中的落地应用,促进多方协同建模与数据价值释放。; 阅读建议:建议读者结合文中提供的Python代码进行实践操作,重点关注联邦学习的通信轮次设置、本地训练迭代策、模型聚合算法设计以及隐私噪声添加机制的实现细节,并可根据实际需求替换底层预测模型(如LSTM、XGBoost、Transformer等)以进一步优化预测性能。
内容概要:本文介绍了一种基于噪声抑制半监督学习的锂离子电池SOH(State of Health,健康状态)估计方法的Python代码实现,旨在通过结合半监督学习框架与噪声抑制技术,提升电池健康状态预测的准确性与鲁棒性。该方法充分利用少量有标签样本和大量无标签数据进行模型训练,有效缓解了实际应用中电池老化数据标注成本高、获取困难的问题。文中详细阐述了模型的整体架构设计、关键特征提取策、噪声处理机制以及半监督学习中的损失函数构建,并提供了完整的可复现代码,便于研究人员理解和二次开发。; 适合人群:具备一定机器学习理论基础和Python编程能力,从事电池管理系统(BMS)、新能源汽车、储能系统等领域的科研人员或工程师,尤其适用于关注电池寿命预测、状态估计及数据驱动建模的研究生与青年学者。; 使用场景及目标:①实现锂离子电池健康状态的高精度估计,服务于电池管理系统的优化与安全预警;②为工业场景下标注数据稀缺的退化建模问题提供一种高效的半监督解决方案;③推动复杂噪声环境下电池性能退化预测的研究进展,增强模型在真实工况中的泛化能力和稳定性; 阅读建议:建议读者结合所提供的Python代码逐模块深入学习,重点理解数据预处理流程、噪声抑制模块的设计原理以及半监督损失函数的实现细节,同时可在不同公开电池数据集上进行迁移实验与对比分析,以全面掌握该方法的有效性与适用边界。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值