使用异或实现两个数的交换

实战六十四:基于机器学习朴素贝叶斯的豆瓣Top250影评的情感分析与预测 附完整源码和数据 阅读详情


实例:将数组的头尾两端依次对调(采用异或的方法实现两数的交换,不需要临时变量,有陷阱)

#include <iostream>
#define N 10

void swap(int *a, int *b)  //交换a,b
{
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}

void reverse_arry(int a[], int arry_len) //将数组的头尾两端互换
{
    int i = 0, j = arry_len-1;
    while(i < j)
    {
        swap(&a[i], &a[j]);
        ++i;
        --j;
    }
}

int main()
{
    int a[N];
    for(int i = 0; i < N; ++i)
    {
        a[i] = i;
    }
    std::cout << "before: ";
    for(int i = 0; i < N; ++i)
    {
        std::cout << a[i] << " ";
    }
    std::cout << std::endl;

    reverse_arry(a, N);
    std::cout << "after reverse_arrt: ";
    for(int i = 0; i < N; ++i)
    {
        std::cout << a[i] << " ";
    }
    std::cout << std::endl;
 
}

陷阱:当用这种方法交换两个相等的数时就会出现问题

a = a ^ a;
a = a ^ a;
a = a ^ a;
其结果自然是零!!

可以做如下修改:

void swap(int *a, int *b)  //交换a,b
{
    if(*a == *b) return;
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}



【Bug已解决】codex: rate limit 429 / Too many requests / RPM exceeded — CodeX CLI 速率限制解决方案 CodeX CLI 触发 429 速率限制(RPM/TPM/并发)的解决方案,含请求间隔、自动重试、便宜模型、Tier 升级与多 Key 轮换。 阅读详情

相关推荐

STM32F103C8T6心电采集实战:从PCB设计到上位机开发的完整指南(附TI杯开源资料)

本文详细介绍了基于STM32F103C8T6的心电采集系统开发全流程,从PCB设计到上位机开发,特别适合大学生电子设计大赛参赛者参考。内容涵盖硬件设计精要、软件算法优化及上位机开发技巧,并附TI杯开源资料,帮助开发者低成本实现医疗级心电信号采集。

kafka6courier的博客 194

​java用异或运算实现两个数交换​

普通写法 int a = 6; int b = 7; int t; t = a; a = b; b = t; 异或运算写法 int a = 6; int b = 7; a = a ^ b; b = a ^ b; a = a ^ b; 解析: 第一步:a = a ^ b;a= 6 ^ 7 第二步:b = a ^ b; b = 6 ^ 7 ^ 7 异或运算中 两个相同值计算结果为0 所以 b = 6 ^ 0 = 6 第二步:a = a ^ b; a = 6 ^...

qq_27972575的博客 1113

Keras中LSTM输入数据重塑与预处理实战指南

LSTM(长短期记忆网络)作为循环神经网络的重要变体,在时间序列建模中发挥着关键作用。其核心原理是通过门控机制学习长期依赖关系,而输入数据的正确重塑是实现这一功能的基础。在Keras框架中,LSTM要求输入数据必须组织成(samples, timesteps, features)的三维张量结构,这与传统全连接网络的处理方式截然不同。从工程实践角度看,合理的数据预处理能显著提升模型性能,特别是在处理温度预测、股票价格分析等时间序列任务时。常见的数据源如CSV文件、图像序列等都需要特定的转换方法,包括使用Tim

weixin_42300144的博客 305

借助逻辑运算符—异或(^)实现俩数交换

对于通过异或运算进行数字交换操作的原理及其注意事项的解读。

weixin_67774721的博客 2068

使用Jacob实现将Word文件转换为Pdf文件

如果是首次使用 jacob,建议先直接从 github上下载 zip包,因为在实现Word转Pdf的时候,不仅需要用到 jacob.jar,还需要 jacob.dll 库,而zip包中都有。官方使用文档可以参考:https://github.com/freemansoft/jacob-project/blob/main/docs/UsingJacob.md。// 如果安装的是微软的 Office,需要使用 Word.Application。

qq_41672950的博客 750

【HALCON+C#实战】3D点云测量系统开发全攻略:从源码解析到工业应用

本文详细介绍了基于HALCON和C#开发3D点云测量系统的全流程,从环境搭建、核心算法实现到工业应用优化。通过源码解析和实战技巧,帮助开发者解决点云数据处理、几何测量及系统集成中的常见问题,提升工业检测的精度与效率。

brown的博客 210

使用异或运算实现两数交换

通常我们实现两数交换需要引入第三个变量作为媒介

MrByte 1807

Matlab激活失败?手把手教你解决License checkout failed问题(附详细截图)

本文针对Matlab激活后出现“License checkout failed”错误的常见问题,提供了详细的解决方案。核心在于精准定位并正确填写Windows系统用户名,而非计算机名或账户全名。文章通过分步截图和命令指引,手把手教你使用`whoami`命令获取正确信息,并重新运行激活程序,从根本上解决因用户名填写错误导致的许可检查失败问题。

weixin_29062823的博客 573

为什么三次异或操作可以交换两个数

a和b是两个整数,经过以下三次异或操作,可以达到交换目的:a = a ^ b;b = a ^ b;a = a ^ b; 首先要理解,什么是^(异或)操作:  二进制两数运算结果:  0 ^ 0 = 0  0 ^ 1 = 1  1 ^ 0 = 1  1 ^ 1 = 0相同为0,不同为1 假设:a = 10 , 其二进制数为: 1010b = 12 , 其二进制数为: 1100如果a和b...

weixin_30548917的博客 1303

qiankun 主子应用部署教程(Nginx 小白版)

本地开发:不用 Nginx,直接localhost:端口即可。本地模拟线上:用hosts + Nginx + 自定义域名,效果和生产接近。线上部署主应用只要配置 history 模式子应用必须支持 CORS + history + 缓存能跑是因为默认 server 兜底,但推荐写真实域名。主应用 vs 子应用的 Nginx 配置区别为什么本地和线上表现不一样history 模式 + 跨域的最佳实践。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 999

手把手教你完成基于matlab的LSTM时间序列分析

时间序列是按时间顺序组织的数字序列,是数据分析中重要的处理对象之一。时间序列的主要特点是数据获取方式一般具有客观性,能反映某种现象的变化趋势或统计指标,进而预测未来走向,这在本质上也是一个回归预测的问题。长短时记忆网络(Long Short-Term Memory,LSTM)是一种循环神经网络,适合处理有更长时间跨度的内部记忆,被广泛应用于时间序列分析,能够保持数据的内在持续性,反映数据的细粒度走势,具有良好的预测效果。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 897

异或运算(交换两个值)

这也是选择排序算法博客中为什么提醒大家在交换两值时要判断nums的i下标与mins下标是否相同。eg: 用十六进制表示:0xA1 ^ 0x06= 0xA7。

拒绝摆烂的博客 1017

uni-app开发-第6篇:uni-app 样式与主题

在 uni-app 开发中,样式与主题的管理是关键部分。样式分为全局样式和局部样式,全局样式在 App.vue 中定义,适用于整个应用,而局部样式在单个 .vue 文件中定义,仅对当前页面生效。局部样式优先级高于全局样式,内联样式优先级最高。样式属性如 font-family 和 color 可被子元素继承。要覆盖全局样式,可在局部样式中重新定义相同规则。主题切换通过 CSS 变量和类名实现,动态切换主题可通过修改元素的类名来完成。例如,定义浅色和深色主题,并通过按钮点击切换主题样式。这些方法帮助开发者灵活

无 369

使用异或运算来实现两个数的交换

在编程时,我们经常需要交换两个变量的值,一种常见的方式就是创建一个临时变量,通过赋值操作来完成交换操作。异或运算是一种位运算,它的逻辑运算规则是:相同为0,不同为1但还有一个同或运算:相同为1,不同为0你记混淆的概率就比较大所以,异或运算可以记成无进位相加!0 ^ N == N;N ^ N = N异或运算满足交换律和结合律简而言之,进行异或运算的时候可以无视变量的顺序上面的两个性质用无进位相加来理解就非常的容易int a = 2;int b = 3;

weixin_69675605的博客 946

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

关于使用异或运算来实现两个数交换的问题

简介 今天在写代码时,需要写一个两个数交换的函数Swap(),于是想装个B,用位运算异或来实现,代码如下: void Swap(int &a, int &b) { a = a^b; b = a^b; a = a^b; } 结果当传入的值是同一个变量时,出现了个尴尬的现象,就是值都变成了0。。。 我们知道异或运算是当都是1或0时,返回0,一个是1一个是0时,...

Stone 765

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

c语言异或实现交换原理,使用异或运算符实现两个数交换原理

使用异或运算符实现两个数交换原理子不语•2019 年 12 月 21 日使用异或运算符实现两个数交换原理可以使用异或运算符实现两个数交换#include using namespace std;int main(){int a = 4, b = 5;cout<a = a ^ b;b = a ^ b;a = a ^ b;cout<return 0;}4 55 4异或运算符,两个输入相...

weixin_39520393的博客 346

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

异或运算交换两个数

a = a^b; b = a^b; a = a^b; 这样就可以不借助第三个变量实现两个数的交换。基于如下几个性质: 任意变量x与自身异或结果为0,即:x^x = 0 任意变量x与0进行异或运算,结果不变,即:x^0 = x 异或运算的结合性:a^b^c = (a^b)^c = a^(b^c) 异或运算的交换性:a^b = b^a 再来解释上面的交换为什么可行:a = a^b b = a^b --

Bing's Blog 7894

^运算交换两个数的原理

异或运算交换两个数的原理和遇到的问题 异或运算交换两个数的原理: 代码: let a = 10; let b = 20; a = a ^ b; b = a ^ b; a = a ^b; console.log(a); console.log(b); 分析: 首先我们通过数字逻辑的学习中知道异或运算: 它是位运算的一种,就是两个数的二进制的所有位来进行异或,相同为false, 相异为true.那么我们可以得出一个结论: a ^ a = 0 和 a ^ 0 = a. 那么, 上面代码块中的 b = a

cd13277946310的博客 1087

三种方法实现不使用第三方变量,交换两个数(加减法,异或,乘除法)

//加减法: #include <stdio.h> int main() { int a=7; //7 int b=8; //8 a=a+b; b=a-b; a=a-b; printf("a=%d b=%d\n",a,b); return 0; } //乘除法: #include <stdio.h> int main() { int a=7; //7 int b=8; //8 a=a*b; b=a/b; a=a/b; pri

qq_51043789的博客 115

异或交换两个数的值

异或交换两个数的值是资源开销最小的方法,不需要中介数,原理简单的来说就是异或的负负得正。 代码: #include &lt;stdio.h&gt; int main() { int a = 11, b = 22; printf("a=%d b=%d\n", a, b); a = a ^ b; b = a ^ b; a = a ^ b; prin...

神棍之路 4万+

如何用异或运算交换两个数的值

" ^ "——异或运算,二元操作运算符,对两个操作元的每个二进制位进行异或运算,运算规则为: 1^1=0,1^0=1,0^1=1,0^0=0;0^n=n,n^n=0。即相同为0,不同为1,但是这样很容易混淆,可以把异或运算记为无进位相加,如0和1异或就是1,1和1异或就会进位,要忽略,就是0。 那么如何不用临时变量去交换两个数的值呢,那么就可以利用0和任何数异或都为这个数本身,任何数和本身异或都为0,这个性质来交换两个数的值,举个例子: public static void main(String[

m0_58969296的博客 2383

为什么异或操作可以交换两个数?

异或实现两个数的交换 a = 10,二进制数为(1010) b = 12,二进制数为(1100) 所以两个数异或以后是6(0110) 这个异或以后的数与a再异或一次就会得到b,(1010)^(0110)=(1100)

小胖0v0的博客 594

Java.无缓存交换(不使用任何临时变量,直接交换两个数的值)

请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值。 给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回交换后的数组。 测试样例: [1,2] 返回:[2,1] 【解题思路】: 下面给出位运算的理论计算基础: x ^ x == 0 x ^ 0 == x 设M,N是常数,且a=M,b=N,则交换使用异或运算交换a和b的过程如下: a = a^b=M^N; b = a^b = M^N^N = M^0 = M;//b交换成功 a = a^b = M^N^M = M^M^N

weixin_43298704的博客 659

异或交换两个数的原理证明

算法 通过异或运算交换两个数 a ^= b b ^= a a ^= b 证明 由异或定义易得: 异或运算满足结合律, 交换律 x ^ x = 0 x ^ 0 = x 设x1 = a,x2 = b x1 ^= x2 x1: a ^ b x2: b x2 ^= x1 x1: a ^ b x2: b ^ a ^ b = a x1 ^= x2 x1: a ^ b ^ a = b x2: a ...

lyyhui的博客 1664

c语言中三个数交换位置,关于C语言交换两个数的实现方法以及个人心得

对于C语言中交换两个数的方法,目前大体上有这么5种:1:直接利用中间变量进行交换;2:利用指针传入函数地址在函数内部进行利用中间变量交换;3:将两个需要交换的数进行加减运算进行交换;注:因C语言有浮点数之分,不可以认为乘除也可进行交换。4:将两个数进行亦或运算,也可以实现交换两个数的目的;5:对两个数进行位操作,也可以实现交换两个数的目的。接下来我将对后面三种进行分析:前面两种太过常见,在此不做说...

weixin_42357331的博客 6221

C语言实现 不使用第三个变量交换两个数的内容

不使用第三个变量交换两个数的内容 使用C语言实现 不使用第三个变量交换两个数的内容 方法一:加减法 int a = 3; int b = 5; a = a + b; b = a - b; a = a - b; a = 3 + 5 = 8 b = 8 - 5 = 3 a = 8 - 3 = 5 原理就是a+b-b得到的值赋给b; a+b-a得到的值赋给a 但是使用加减法有一个问题: 如果a和b的数字很大的时候,a+b有可能会溢出。 方法二:使用异或 a = a ^ b; b = a ^ b; a = a ^

ThePaK的博客 1947
上一篇: 魔术师发牌问题
下一篇: 汉诺塔递归求解
devil_pull
博客等级 码龄15年 12粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值