首页 > 其他分享 >通过异或(^)实现基本数据类型(浮点型除外)值互换

通过异或(^)实现基本数据类型(浮点型除外)值互换

时间:2022-09-22 11:12:36浏览次数:54  
标签:10 20 变量 int 数据类型 浮点 异或 互换

一般情况下,我们要实现值替换的时候需要引入一个中间变量,以int为例代码如下

int a = 10, b = 20;
// 中间变量
int temp;
temp = a;
a = b;
b = temp; // a = 20, b = 10

但是我们可以通过异或来简化代码,省略中间变量的使用,代码如下

int a = 10, b = 20;
a ^= b ^ (b = a);

执行结果如下

那么为什么可以通过异或来实现值的互换呢。b不是在等式中被替换为了a吗,为什么没有影响呢。
首先我们要知道在一个等式里,多次用到一个变量,在不存在赋值的地方,变量的值都为初始值,等式执行完后,该变量等于最后一次的赋值。例子代码如下

int a = 10,b = 20;
a = b + (b = 10) + (b = 30);

执行结果如下

在该处a = 20 + 10 + 30结果为60且b = 30符合上面的结论。

通过异或的概念我们可以知道1 ^ 0 = 1,1 ^ 1 = 0。根据这两个条件我们可以对a ^= b ^ (b = a)如何实现值互换的来进行分析
a ^= b ^ (b = a)等价于a = a ^ b ^ a,~此处(b = a)中的b已经被替换为了a
接着,我们根据1 ^ 1 = 0可以得到a = a ^ b ^ a等价与a = b ^ 0
最后根据1 ^ 0 = 1可以得出a = b ^ 0 等价于 a = b
这样,我们就完成了a,b值的互换

标签:10,20,变量,int,数据类型,浮点,异或,互换
From: https://www.cnblogs.com/tutaotao/p/16718489.html

相关文章

  • 异或笔记
    异或异或基本性质交换律:a^b=b^a结合律:a^(b^c)=(a^b)^c自反律:a^a=0异或题型总结01Trie概述:使用01Trie的题目,大多涉及某个数和某个数异或后满足......
  • Typescript学习之路(3) - 基础数据类型介绍
    安装TSnpmi-gtypescriptTips:因为使用的命令是tsc,这里安装的时候好多人都错误写成了 npmi-gtsc❎,结果在使用的时候就会被提示,安装的不对,要重新安装。TS转换JS......
  • Go语言基础之基本数据类型
    基本数据类型    Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go语言的基本类型和其他......
  • Python学习:转义字符及用法、数据类型转换函数
    ASCII编码为每个字符都分配了唯一的编号,成为编码值。在Python中,一个ASCII字符除了可以用它的实体(真正的字符)表示,还可以用它的编码值表示。这种使用编码值来间接地表示字符......
  • 异或运算
    1.异或:相同为假(0),相异为真(1)2.基本运算:1⊕1=00⊕0=01⊕0=10⊕1=13.两个特性:恒等律——X⊕0=X归零律——X⊕X=0同样的可以用真值表证明交......
  • 数据类型
     typevarName[=value][{,varName[=value]}];//数据类型变量名=值 publicclass Demo02{  publicstaticvoidmain(String[]args){   ......
  • IEEE浮点数向偶数舍
    CSAPP​ 向偶数舍入初看上去好像是个相当随意的目标——有什么理由偏向取偶数呢?为什么不始终把位于两个可表示的值中间的值都向上舍入呢?使用这种方法的一个问题就是很容......
  • T1024:保留3位小数的浮点数(信息学一本通C++)
     目录[题目描述]读入一个单精度浮点数,保留3位小数输出这个浮点数。[输入]只有一行,一个单精度浮点数。[输出]也只有一行,读入的单精度浮点数。[输入样例]12.34521......
  • python基本数据类型
    基本数据类型:整形int12浮点型float12.12列表list[]集合set{1,2,3}字典dict{1:'a'},key是不可变类型,一般是字符串,value可以使任意类型元祖typle(1,2,3)......
  • 数据类型扩展
     packagemyaction;publicclassDemo1{publicstaticvoidmain(String[]args){//整数拓展     二进制0b十进制八进制0......