异或运算

异或运算

运算规律

相同为0,不同为1

举例说明:有两个二进制数,分别为ab,他们两个异或计算。

10110^00111=10001

一个值于0异或,都是这个数

a^0=a

任何数跟自己异或,都为0

a^a=0

满足交换律和结合律

(a ^ b) ^ c = a ^ (b ^ c)

两值交换

let a = 5;
let b = 10;
// 值交换
a = a ^ b;
b = a ^ b;
a = a ^ b;

console.log('a=>', a)
console.log('b=>', b)
1. a = a ^ b;  此时: a = a ^ b; b = 10;
2.b = a ^ b;  此时:b = a ^ b ^ b。根据上边的规律,【任何数跟自己异或为0】得到: b = a ^ 0根据规律,进而得到 b = a。
3.a=(a ^ b) ^ (a ^ b ^ b)=a^b^a=b

有一个数组,只有一种数出现了奇数次,其它所有树出现了偶数次,怎么找出出现奇数次的这个数?

const a = [2,3,4,5,6,5,5,6,4,3,2];

// 输出奇数
number = 5;
我们通过异或运算,代码如下
const arr = [2,3,4,5,6,5,5,6,4,3,2];
let number = arr[0];
for (var i = 1; i < arr.length; i ++) {
    number = number ^ arr[i]
}

console.log('number=>', number);
我们把数组中的每个数都进行异或运算,就会得出奇数次出现的那个数。

简单加解密

我们有明文text,秘钥key,进行异或运算得到密文cipher
加密
const cipher = text ^ key;
解密
const text = cipher ^ key;

const cipher = text ^ key;
const text = (text ^ key) ^ key;
posted @   7c89  阅读(386)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示