首页 > 其他分享 >在不创建第三个变量的情况下交换两个变量的值

在不创建第三个变量的情况下交换两个变量的值

时间:2023-05-29 17:00:58浏览次数:58  
标签:00000101 变量 密码 00000000 创建 第三个 int 异或 字节

1.加减法

int main() {
	int a = 3;
	int b = 5;
	a = a + b; //a=8
	b = a - b; //b=8-5=3
	a = a - b; //a=8-3=5
	printf("a=%d,b=%d",a, b);
	return 0;
}

缺点:int型占4字节,若a,b较大但都恰好占4字节,而它们的和超出4个字节,二进制数据会进位丢失,此时加减法不再适用。

2.异或法

int main() {
	int a = 3; //00000000 00000000 00000000 00000011
	int b = 5; //00000000 00000000 00000000 00000101
	a = a^b;   //00000000 00000000 00000000 00000110  创建密码
	b = a^b;   //00000000 00000000 00000000 00000011
	a = a^b;   //00000000 00000000 00000000 00000101
	printf("a=%d,b=%d",a, b);
	return 0;
}

先用a^b相当于先创建一个密码来存储a与b的对应二进制位是否相同的信息,1代表不同,0代表相同

根据异或的性质x^1=!x ;  x^0=x

把b异或此密码就能得到a,得到a后再异或此密码就能把b的值赋给a,实现a与b的交换

标签:00000101,变量,密码,00000000,创建,第三个,int,异或,字节
From: https://blog.51cto.com/u_16102535/6373095

相关文章

  • C++-条件变量/互斥锁/lock_guard
    条件变量参考C++Reference对于条件变量的解释和例程:https://en.cppreference.com/w/cpp/thread/condition_variable条件变量和互斥锁一般结合使用。因为线程处于等待状态中,一般需要查看一个全局变量或共享的变量的状态,来决定是否停止等待继续运行程序。对于此全局变量,必须要......
  • .NET 创建无边框的跨平台应用
    .NET创建无边框的跨平台应用在创建了Photino应用程序以后我们发现它自带了一个标题栏,并且非常丑,我们现在要做的就是去掉这个很丑的自带标题栏,并且自定义一个更好看的,下面我们将用MasaBlazor提供的模板去进行实战。安装模板安装MasaBlazor提供的rc2的模板dotnetnewinstall......
  • Factory Method Pattern 工厂方法模式简介与 C# 示例【创建型】【设计模式来了】
    〇、简介1、什么是工厂方法模式?一句话解释:  实体类和工厂类均为单独实现,不影响已实现的类,方便扩展。工厂方法模式(FactoryMethodPattern)是一种创建型模式,它允许客户端通过工厂方法来创建对象,而不是直接使用构造函数。这样可以让客户端代码更加灵活,同时保持实现的独立性。工......
  • vst实例(2) 创建VST
    前面我们知道,创建一个虚拟树,应该首先告知VST节点数据的大小(即nodedatasize),其实在创建树结构时,这一点并不是必须的,而是如果你需要让VST的每一个节点能指向一定的数据,从而在执行树的操作时,能用到这些数据,那么你最适合的方法是定义一个结构类型(record),然后让node.data指向这个record......
  • VB创建ACCESS数据库和数据表
    建立数据库1PublicSubBD_Create()23OnErrorGoTodb_err45DimpstrAsString67Dimtb1AsNewTable89pstr="PROVIDER=Microsoft.Jet.OLEDB.4.0;"'必须用4.01011pstr=pstr&"Data......
  • Qt线程简单使用一:QThread~创建线程类子类
     需求:点击QPushButton按钮,QLabel中的数字,不断累加,一直到999。 做法:点击QPushButton后,启动线程,线程while循环,不断发送累加的数字回主线程,修改QLabel中的数字 其他:这种线程的写法是最简单的,全部是Qt封装好的,只需要重写run函数就可以了。 主要代码://......
  • rust 初识基础: 变量、数据类型、函数、所有权、枚举
    了解到rust和WebAssembly的结合使用,可以构建前端应用,而且性能也比较好。初步学习使用rust是预编译静态类型语言。安装rust官网下载rust-CN,大致了解下为什么选择:高性能、可靠性、生产力。打开控制台啊,执行安装(mac系统,windwos或其他系统查看官网)&>curl--proto......
  • 6.6.4 PCS创建Oracle 资源及资源组
    在RHCS体系中,Oracle的启动是按以下顺序进行的:VIP。监听器。逻辑卷(ISCSI共享出来的)。文件系统(在逻辑卷上创建)。数据库实例。上边这些资源,在PCS里创建好以后,将其组合成一个单独的资源组,形成一个不可分割的整体。1)PCS添加Oracle监听器资源Oracle的VIP资源在前边已经添加,那么接下来就......
  • 解决laravel环境在Ubuntu下使用php artisan 创建文件后无法在phpstorm中编辑的问题
    一、打开ubuntu运行sudovi/etc/profile.在末尾添加 umask000exportumask摁esc后保存:wq退出重启电脑即可二、或者直接在ubuntu下运行umask000这样创建文件后文件权限直接是777 三、以上两者区别1.第一点防止重启电脑后将umask重置掉2.第二点如果执行此命令的......
  • php循环创建数组
    PHP中可以使用for循环、while循环和foreach循环来创建数组。下面是一个使用for循环创建数组的示例代码:<?php$myArray=array();for($i=0;$i<5;$i++){$myArray[$i]=$i*2;}print_r($myArray);?>该代码将创建一个空数组,然后使用for循环遍历数组并为每个元素......