两数交换的三种写法

两数交换的三种写法

上一篇博客中写到在学习c语言的过程中,很多时候,有很多问题我们可以有不止一种选择,它会有好几种方式。当然,不只仅仅局限于c语言,在其他语言中也很适用。比如c++,java ,python等。c语言中还有好多的乐趣性等待发掘,例如同样的代码,在不同的环境中运行,会出现很多情况,例如某处语句报错,无法编译,编译结果不同等问题,这些都是在学习过程中会遇到的,这次我们暂时只讨论一个代码的其他几种写法,并且能够成功运行出来。

这次,我们具体实例来解决一个在初学c语言中的常见的一个小问题,用三种方式完成交换两个数字的数值。遇到这个问题,初学者常常会用到定义一个中间变量,来使两数完成交换。

方法一,定义一个中间变量,代码如下

#include<stdio.h>
int main()
{
	int num1,num2,temp;
	printf("请输入两个整数: ");
	scanf("%d %d",&num1,&num2);
	temp=num1;
	num1=num2;
	num2=temp;
	printf("%d %d\n",num1,num2);
	return 0;
 } 

方法二,不定义中间变量,利用加减法运算来实现两数的交换,代码如下

#include<stdio.h>
int main()
{
	int num1,num2;
	printf("请输入两个整数: ");
	scanf("%d %d",&num1,&num2);
	num1=num1+num2;
	num2=num1-num2;
	num1=num1-num2;
	printf("%d %d\n",num1,num2);
	return 0;
 } 

方法三,利用异或运算实现数交换,代码如下

#include<stdio.h>
int main()
{
	int num1,num2;
	printf("请输入两个整数: ");
	scanf("%d %d",&num1,&num2);
	num1=num1^num2;
	num2=num1^num2;
	num1=num1^num2;
	printf("%d %d\n",num1,num2);
	return 0;
 } 

以上就是交换两数的三种方法,到底使用哪种方法根据个人习惯和题目意思,如果让定义中间变量,那就用第一种。明确说明不允许定义中间变量,那就使用第二和第三种方法。上面所用到的第二种加减法和第三种异或运算都用是c语言中操作符中的知识,操作符是c语言中我们常常会用到的知识,需要我们熟练掌握。

此次我就不讲操作符了,下一篇我会为大家详细的介绍一下我学习操作符的心得以及操作符的一些使用。
此处附上上一篇博客链接 初阶段的学习之路

处理层协议( transaction Layer specification transaction Layer specificationtransaction Layer specificationtransaction Layer specification transaction Layer specificationtransaction Layer specification transaction Layer specificationtransaction Layer specificationtransaction Layer specification transaction Layer specificationtransaction Layer specificationtransaction Layer specificationtransaction Layer specificationtransaction Layer specification transaction Layer specificationtransaction Layer specificationtransaction Layer specification transaction Layer specificationtransaction Layer specificationtransaction Layer specification transaction Layer specification) ◆TLPTLPTLP概况。 ◆寻址 定位和路由导向 定位和路由导向 定位和路由导向 定位和路由导向 。 ◆i/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message request i/o,memory,configuration,message request i/o,memory,configuration,message requesti/o,memory,configuration,message request i/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message request i/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message request i/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message request i/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message request i/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message requesti/o,memory,configuration,message request、completion completioncompletioncompletioncompletioncompletioncompletioncompletioncompletion详解。 详解。 ◆请求和 ◆请求和 响应 处理机制。 处理机制。 处理机制。 ◆virtual channel(vc)Mechanism虚拟通道机制。 ◆data integrity数据完整性。
<think>好的,我需要帮助用户了解PCIE协议的基础知识和学习资源。首先,我要整理已有的引用资料,看看哪些内容可以直接使用。引用1提到了事务层数据包的组包和解包,引用2讨论了VDM和其头部结构,引用3涉及端口仲裁,引用4提供了NVMe协议的文档链接。虽然NVMe不是PCIE直接相关,但可能作为补充资源。 用户需要入门资料和教程,我应该从基础概念开始,分步骤介绍PCIE协议的结构,比如分层模型、关键机制等。然后推荐学习资源,包括官方文档、书籍、在线教程和实践工具。需要确保回答结构清晰,符合用户要求的系统级指令,比如正确使用LaTeX格式,生成相关问题。 需要检查是否有遗漏的关键点,比如PCIE的应用场景或常见问题。同时,确保所有技术术语正确,比如事务层、数据链路层、物理层的功能。可能还需要补充一些学习建议,如结合实验或项目来加深理解。最后,生成的相关问题要围绕PCIE的学习难点、版本差异、实际应用和调试方法展开。</think>### PCIe协议入门学习指南 #### 一、PCIE协议基础概念 1. **分层架构** - *事务层*:负责数据包(TLP)的组包和解包,支持读写请求、配置操作等功能[^1] $$ \text{TLP结构} = \text{Header} + \text{Data Payload} + \text{ECRC} $$ - *数据链路层*:通过ACK/NAK机制保证数据完整性 - *物理层*:定义电气特性与编码方案(如128b/130b编码) 2. **关键机制** - 流量控制:采用信用量(Credit)机制避免数据溢出 - 虚拟通道(Virtual Channel):引用[3]提到的端口仲裁机制支持多通道优先级控制 - 错误检测与恢复:包括ECRC校验和链路重训练 #### 二、学习资源推荐 1. **官方文档** - PCI-SIG官网提供协议规范下载(需注册会员) - NVMe协议文档(引用[4])可作为存储领域应用延伸学习 2. **中文教程** - 《PCI Express体系结构导读》(王齐著) - 博客文章《PCIE学习笔记》系列(引用[3]) 3. **实践工具** ```python # Wireshark抓包过滤器示例 pcie.dtlp || pcie.utlp ``` - FPGA开发板配套PCIE IP核(如Xilinx UltraScale+) #### 三、学习路径建议 1. **基础阶段**(2-4周) - 掌握TLP/DLLP格式(引用[1][2]) - 理解配置空间访问机制 2. **进阶阶段**(1-2月) - 分析链路训练过程 - 学习QoS实现原理(引用[3]的VC仲裁) 3. **实战阶段** - 使用PCIe协议分析仪捕获真实流量 - 通过FPGA实现端点设备
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值