目录
异或逻辑
问题陈述
示例
方法
伪代码
输出
分析
结论
首页 后端开发 C++ 将两个数字的二进制表示长度调整为相等后进行异或运算

将两个数字的二进制表示长度调整为相等后进行异或运算

Sep 10, 2023 pm 04:01 PM
二进制 长度 异或

将两个数字的二进制表示长度调整为相等后进行异或运算

XOR,或异或,是一种布尔逻辑运算,用于生成奇偶校验位,用于错误检查、容错等。使用各种符号来表示此运算:^、⊕、⊻等。

异或逻辑

仅当两个参数不同时,XOR 运算才为真。也就是说,相同位异或为0,不同位异或为1。

相同的位 -

0^0=0

1^1=0

不同的位 −

0^1=1

1 ^ 0 = 1

问题陈述

给定两个数字 a 和 b,在使它们的二进制表示的长度相等后找出它们的异或。

提示 − 通过在较小的数字后面添加尾随的零,二进制表示将变得相等。

示例

输入 -

a = 10,b = 5

输出-

0

说明

10的二进制表示为1010,5的二进制表示为101。

将尾随零添加到 5 就得到 1010。

因此,1010^1010的异或结果为0。

因此,输出。

输入 -

a = 15,b = 8

输出

7

说明 -

15的二进制表示为1111,8的二进制表示为1000。

由于两个二进制表示的长度相等,因此不需要添加尾部的零。

1111 ^ 1000 的异或结果为 0111,即十进制表示为 7。因此,输出结果为 7。

输入 -

a = 15,b = 3

输出

7

说明 -

15的二进制表示为1111。3的二进制表示为11。3的二进制表示加上尾随零后,变为1100。

1111^1100的异或结果为0011。

0011在十进制表示中为3。因此,输出结果。

方法

  • 计算两个数字中的位数。

  • 可以通过将数字右移直到变为零,并计算循环执行的次数来计算位数。将数字右移1位相当于将其除以2。

  • 如果较小数字的位数较少,则按如下方式进行左移:smaller_number

  • XOR两个数字以得到答案并打印出来。

伪代码

main()
Initialize a -> 15  and  b -> 3.
Function call find_xor(a,b);

find_xor(int a, int b):
c -> minimum of a and b.
d -> maximum of a and b.
count_c -> bit_count(c)
count_d ->bit_count(d)
If count_c < cound_d, then:
c -> c << (count_d - count_c)
Return c XOR d.

bit_count(int x):
count -> 0
while(x != 0):
	Increase the count by one.
	Right shift x by 1, i.e., divide it by 2.
Return x.
登录后复制

示例

下面是一个C++程序,用于在将两个数字的二进制表示长度变为相等后计算它们的异或值。

#include <bits/stdc++.h>
using namespace std;
// Function to count the number of bits in binary representation
// of an integer
int bit_count(int x){
   //Initialize count as zero
   int count = 0;
   //Count the bits till x becomes zero.
   while (x)	{
      //Incrementing the count
	  count++;
      // right shift x by 1
      // i.e, divide by 2
      x = x>>1;
   }
   return count;
}
//Function to find the XOR of two numbers. Trailing zeros are added to the number having a lesser number of bits to make the bits in both numbers equal.
int find_xor(int a, int b){
   //Store the minimum and maximum of both the numbers
   int c = min(a,b);
   int d = max(a,b);
   //Store the number of bits in both numbers.
   int count_c = bit_count(c);
   int count_d = bit_count(d);
   //If the number of bits in c is less, left shift if by the number of exceeding bits.
   if (count_c < count_d){
      c = c << ( count_d - count_c);
   }
   return (c^d);
}
//Driver code
int main(){
   //Initialize a and b.
   int a = 15, b = 3;
   cout << "a = 15, b = 3" << endl;
   //Store the XOR of both the numbers after required computations
   //Function call
   int ans = find_xor(a,b);
   //Print the final result
   cout << "XOR of a and b: "<<ans<<endl;
   return 0;
}
登录后复制

输出

a = 15, b = 3
XOR of a and b: 3
登录后复制

分析

时间复杂度 - O(log n) [对数]

由于count函数中的while循环,时间复杂度是对数级别的。

由于这个数字被除以二直到变为零,复杂度变为以2为底的log n。

空间复杂度 - O(1) [常数]

空间复杂度是常数,因为程序中没有使用额外的空间。

结论

在本文中,我们讨论了在使两个数字的二进制表示长度相等后计算它们的 XOR 的问题。

我们讨论了XOR的概念,然后进行了示例和方法的讲解。该方法使用尾随零来使二进制表示的位数相等。我们还看到了该问题的伪代码和C++程序。

以上是将两个数字的二进制表示长度调整为相等后进行异或运算的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

二进制算法怎么算 二进制算法怎么算 Jan 19, 2024 pm 04:38 PM

二进制算法是一种基于二进制数的运算方法,其基本运算包括加法、减法、乘法和除法。除了基本运算外,二进制算法还包括逻辑运算、位移运算等操作。逻辑运算包括与、或、非等操作,位移运算包括左移和右移操作。这些操作都有对应的规则和操作数的要求。

如何使用C语言将二进制转换为十六进制? 如何使用C语言将二进制转换为十六进制? Sep 01, 2023 pm 06:57 PM

二进制数以1和0表示。16位的十六进制数系统为{0,1,2,3…..9,A(10),B(11),……F(15)}为了从二进制表示转换为十六进制表示,位串id被分组为4位块,从最低有效侧开始称为半字节。每个块都替换为相应的十六进制数字。让我们看一个示例,以清楚地了解十六进制和二进制数字表示。001111100101101100011101 3  E  5  B&nb

EDVAC有哪两个重大的改进 EDVAC有哪两个重大的改进 Mar 02, 2023 pm 02:58 PM

EDVAC的两个重大的改进:一是采用二进制,二是完成了存贮程序,可以自动地从一个程序指令进到下一个程序指令,其作业可以通过指令自动完成。“指令”包括数据和程序,把它们用码的形式输入到机器的记忆装置中,即用记忆数据的同一记忆装置存贮执行运算的命令,这就是所谓存贮程序的新概念。

Golang如何读取二进制文件? Golang如何读取二进制文件? Mar 21, 2024 am 08:27 AM

Golang如何读取二进制文件?二进制文件是以二进制形式存储的文件,其中包含了计算机能够识别和处理的数据。在Golang中,我们可以使用一些方法来读取二进制文件,并将其解析成我们想要的数据格式。下面将介绍如何在Golang中读取二进制文件,并给出具体的代码示例。首先,我们需要使用os包中的Open函数打开一个二进制文件,这将返回一个文件对象。然后,我们可以使

计算机内部采用二进制的主要原因是什么? 计算机内部采用二进制的主要原因是什么? Apr 04, 2019 pm 02:25 PM

计算机采用二进制的主要原因:1、计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示;2、二进制中只使用0和1两个数字,传输和处理时不易出错,因而可以保障计算机具有很高的可靠性。

轻松学会Go语言中16进制转二进制 轻松学会Go语言中16进制转二进制 Mar 15, 2024 pm 04:45 PM

题目:轻松学会Go语言中16进制转二进制,需要具体代码示例在计算机编程中,经常会涉及到对不同进制数之间的转换操作。其中,16进制和二进制之间的转换是比较常见的。在Go语言中,我们可以通过一些简单的代码示例来实现16进制到二进制的转换,让我们一起来学习一下。首先,我们来了解一下16进制和二进制的表示方法。16进制是一种表示数字的方法,使用0-9和A-F来表示1

PHP数组长度限制是多少? PHP数组长度限制是多少? Mar 13, 2024 pm 06:30 PM

PHP中数组的长度并没有固定的限制,它可以根据系统的内存大小来动态调整。在PHP中,数组是一种非常灵活的数据结构,可以存储任意数量的元素,每个元素可以是任意类型的值,甚至可以是另一个数组。PHP数组的长度限制主要取决于系统的内存大小和PHP配置的内存限制。一般来说,如果系统的内存足够大,并且PHP的内存限制足够高,数组的长度可以很大。但是,如果系统内存不足或

负数的二进制怎么表示 负数的二进制怎么表示 Nov 23, 2023 pm 04:11 PM

负数在计算机中采用补码表示,即用正数的二进制补数来表示负数。

See all articles