C语言操作符

算数操作符

1.%不可以作用于整数和浮点数,例如:int % double,必须两个操作数都为整型;
2.对于/操作符,若两个操作数都为整型则进行整型运算,若有一个操作数为浮点型,则进行浮点数运算。

移位操作符

1.左移: num<<1,左边抛弃,右边补0;
2.右移:num>>1
(1)逻辑移位:左边补0,右边丢弃;
(2)算术移位:左边用原本值的符号位填充,右边丢弃。

内存中存储负数为其补码,-1则为32位全1

对于移位操作符,不要移动负数位,这是标准为定义的。

	int num = 10;
	num>>-1//error

位操作符

	& //按位与
	| //按位或
	^ //按位异或
	//以上操作符的操作数都必须为整数

面试题:

不能创建临时变量,实现两个数的交换。

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

单目操作符

	sizeof      操作数的类型长度(以字节为单位)
	~           对一个数的二进制形式按位取反
	*           间接访问操作符(解引用操作符)
	(类型)       强制类型转换

关系操作符

特别注意==和=不小心写错,造成的弱智bug

逻辑操作符

	int main()
	{
		int i = 0, a = 0, b = 2, c = 3, d = 4;
		//i = a++ && ++b && d++;
		//逻辑与运算,若左操作数为0,则不再进行右操作数的运算;
		i = a++||++b||d++;
		//逻辑或运算,若左操作数为1,则不再进行右操作数的运算
		printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
		return 0;
	}

逻辑与运算,若左操作数为0,则不再进行右操作数的运算;
逻辑或运算,若左操作数为1,则不再进行右操作数的运算。

条件操作符

	exp1 ? exp2 : exp3

逗号表达式

	exp1, exp2, exp3, ...

逗号表达式,从左到右依次执行,结果为最后一个表达式的结果

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

1.[ ]下标引用操作符

操作数:一个数组名 + 一个索引值 (两个操作数)

2.()函数调用操作符至少有一个操作数(函数名)
3.访问一个结构的成员

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

表达式求值

整形提升

表达式的整型运算要在CPU的相应运算器件中执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度;
因此,即使两个char类型相加,在CPU中执行时实际上也要先转换为CPU内整数操作数的标准长度;
通用CPU是难以直接实现两个8比特位直接相加运算,所以表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU执行运算。

	char a, b, c;

	a = b + c;

b和c的值先被提升为普通整型,然后再执行加法运算;
加法运算完成之后,结果被截断,然后再存入a中。

整形提升是按照变量的数据类型的符号位来提升的

	//负数的整形提升
	char c1 = -1;
	c1只有8个比特位:
	11111111
	整形提升后:
	11111111111111111111111111111111

	//正数数的整形提升
	char c2 = 1;
	00000001

	00000000000000000000000000000001

	//无符号整形提升,高位补0
欧姆龙FINS(工厂集成网络系统)协议是专为该公司自动化设备间数据交互而设计的网络通信标准。该协议构建于TCP/IP基础之上,允许用户借助常规网络接口执行远程监控、程序编写及信息传输任务。本文档所附的“欧ronFins.zip”压缩包提供了基于C与C++语言开发的FINS协议实现代码库,旨在协助开发人员便捷地建立与欧姆龙可编程逻辑控制器的通信连接。 FINS协议的消息框架由指令头部、地址字段、操作代码及数据区段构成。指令头部用于声明消息类别与长度信息;地址字段明确目标设备所处的网络位置与节点标识;操作代码定义了具体的通信行为,例如数据读取、写入或控制器指令执行;数据区段则承载实际交互的信息内容。 在采用C或C++语言实施FINS协议时,需重点关注以下技术环节: 1. **网络参数设置**:建立与欧姆龙可编程逻辑控制器的通信前,必须获取控制器的网络地址、子网划分参数及路由网关地址,这些配置信息通常记载于设备技术手册或系统设置界面。 2. **通信链路建立**:通过套接字编程技术创建TCP连接至控制器。该过程涉及初始化套接字实例、绑定本地通信端口,并向控制器网络地址发起连接请求。 3. **协议报文构建**:依据操作代码与目标功能构造符合规范的FINS协议数据单元。例如执行输入寄存器读取操作时,需准确配置对应的操作代码与存储器地址参数。 4. **数据格式转换**:协议通信过程中需进行二进制数据的编码与解码处理,包括将控制器的位状态信息或数值参数转换为字节序列进行传输,并在接收端执行逆向解析。 5. **异常状况处理**:完善应对通信过程中可能出现的各类异常情况,包括连接建立失败、响应超时及错误状态码返回等问题的处理机制。 6. **数据传输管理**:运用数据发送与接收函数完成信息交换。需注意FINS协议可能涉及数据包的分割传输与重组机制,因单个协议报文可能被拆分为多个TCP数据段进行传送。 7. **响应信息解析**:接收到控制器返回的数据后,需对FINS响应报文进行结构化解析,以确认操作执行状态并提取有效返回数据。 在代码资源包中,通常包含以下组成部分:展示连接建立与数据读写操作的示范程序;实现协议报文构建、传输接收及解析功能的源代码文件;说明库函数调用方式与接口规范的指导文档;用于验证功能完整性的测试案例。开发人员可通过研究这些材料掌握如何将FINS协议集成至实际项目中,从而实现与欧姆龙可编程逻辑控制器的高效可靠通信。在工程实践中,还需综合考虑网络环境稳定性、通信速率优化及故障恢复机制等要素,以确保整个控制系统的持续可靠运行。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值