从底层理解异或(^)运算 您所在的位置:网站首页 4和4和4和4等于2 从底层理解异或(^)运算

从底层理解异或(^)运算

2024-07-18 03:02| 来源: 网络整理| 查看: 265

从底层理解异或运算 异或运算补充1 异或运算定义2 异或运算性质3 例题一3 例题二

异或运算补充 1 异或运算定义

异或运算是属于逻辑运算中的一种 如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0 也可以理解为无进制相加 1 0 1 0 0 1 0 0 1 1 1 0 0 1 0 1 0 1 ———————— 0 1 1 0 1 1 1 0 0

2 异或运算性质

1)、0与任何一个数异或结果都为该数 任何一个数与自己异或都为0 0 ^ N = N N ^ N = 0

2)、异或运算满足交换律和结合律 a ^ b = b ^ a a ^ b ^ c = a ^ ( b ^ c )

3)、如果是一堆数 进行异或运算,最终结果与这堆数异或运算的顺序无关。

示例:交换ab的值(在不额外申请新变量的情况下): int a = 甲; int b = 乙;

a = a ^ b; b = a ^ b; a = a ^ b; (注:此操作必须保证a和b在内存中必须是两块东西,如果是相同的位置 就会洗成0)

证明 (根据以上定理): int a = 甲; int b = 乙;

操作aba = a ^ b;a = 甲 ^ 乙b = 乙b = a ^ b;a = 甲 ^ 乙b = 甲 ^ 乙 ^ 乙 = 甲a = a ^ b;a = 甲 ^ 乙 ^ 甲 = 乙b = 甲 3 例题一

已知一个整数数组 arr[] ,有一种数出现了奇数次其他的数都出现了偶数次。求该数。 要求 时间复杂度为O(N),空间复杂度为 O(1)。

求解: :首先定义一个变量 : int eor = 0; 然后让eor与数组中的每个数都异或一遍,最后eor的值就是出现奇数次的这个数。

例题一 function oneOddNumber(arr) { let eor = 0; for (let i = 0; i let ero = 0; for (let i = 0; i if ((arr[i] & rightOne) === 0){ hep ^= arr[i]; } } console.log(hep); console.log(ero ^ hep); } let array = [1,1,2,3,3,3,3,4,4,4,5,5] // 打印出 2 4 printOddTimesNum(array)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有