如果为二进制位,则XNOR给出XOR的反方向。
First bit | Second bit | XNOR
0 0 1
0 1 0
1 0 0
1 1 1
It gives 1 if bits are same else if
bits are different it gives 0.
它是XOR的反向,但是我们不能直接实现它,所以这是实现XNOR的程序
例子:
Input : 10 20
Output : 1
Binary of 20 is 10100
Binary of 10 is 1010
So the XNOR is 00001
So output is 1
Input : 10 10
Output : 15
Binary of 10 is 1010
Binary of 10 is 1010
So the XNOR is 1111
So output is 15
第一种方法:-(O(logn))在此解决方案中,我们一次检查一位。如果两个位相同,则将结果放入1,否则将放入0。
让我们用下面的代码来理解它
C++
// CPP program to find
// XNOR of two numbers
#include
using namespace std;
// log(n) solution
int xnor(int a, int b)
{
// Make sure a is larger
if (a < b)
swap(a, b);
if (a == 0 && b == 0)
return 1;
int a_rem = 0; // for last bit of a
int b_rem = 0; // for last bit of b
// counter for count bit
// and set bit in xnornum
int count = 0;
// to make new xnor number
int xnornum = 0;
// for set bits in new xnor number
while (a)
{
// get last bit of a
a_rem = a & 1;
// get last bit of b
b_rem = b & 1;
// Check if current two
// bits are same
if (a_rem == b_rem)
xnornum |= (1 << count);
// counter for count bit
count++;
a = a >> 1;
b = b >> 1;
}
return xnornum;
}
// Driver code
int main()
{
int a = 10, b = 50;
cout << xnor(a, b);
return 0;
}
Java
// Java program to find
// XNOR of two numbers
import java.util.*;
import java.lang.*;
public class GfG {
public static int xnor(int a, int b)
{
// Make sure a is larger
if (a < b) {
// swapping a and b;
int t = a;
a = b;
b = t;
}
if (a == 0 && b == 0)
return 1;
// for last bit of a
int a_rem = 0;
// for last bit of b
int b_rem = 0;
// counter for count bit
// and set bit in xnornum
int count = 0;
// to make new xnor number
int xnornum = 0;
// for set bits in new xnor number
while (true) {
// get last bit of a
a_rem = a & 1;
// get last bit of b
b_rem = b & 1;
// Check if current two bits are same
if (a_rem == b_rem)
xnornum |= (1 << count);
// counter for count bit
count++;
a = a >> 1;
b = b >> 1;
if (a < 1)
break;
}
return xnornum;
}
// Driver function
public static void main(String argc[])
{
int a = 10, b = 50;
System.out.println(xnor(a, b));
}
}
Python3
# Python3 program to find XNOR
# of two numbers
import math
def swap(a,b):
temp=a
a=b
b=temp
# log(n) solution
def xnor(a, b):
# Make sure a is larger
if (a < b):
swap(a, b)
if (a == 0 and b == 0) :
return 1;
# for last bit of a
a_rem = 0
# for last bit of b
b_rem = 0
# counter for count bit and
# set bit in xnor num
count = 0
# for make new xnor number
xnornum = 0
# for set bits in new xnor
# number
while (a!=0) :
# get last bit of a
a_rem = a & 1
# get last bit of b
b_rem = b & 1
# Check if current two
# bits are same
if (a_rem == b_rem):
xnornum |= (1 << count)
# counter for count bit
count=count+1
a = a >> 1
b = b >> 1
return xnornum;
# Driver method
a = 10
b = 50
print(xnor(a, b))
# This code is contributed by Gitanjali
C#
// C# program to find
// XNOR of two numbers
using System;
public class GfG {
public static int xnor(int a, int b)
{
// Make sure a is larger
if (a < b) {
// swapping a and b;
int t = a;
a = b;
b = t;
}
if (a == 0 && b == 0)
return 1;
// for last bit of a
int a_rem = 0;
// for last bit of b
int b_rem = 0;
// counter for count bit
// and set bit in xnornum
int count = 0;
// to make new xnor number
int xnornum = 0;
// for set bits in new xnor number
while (true) {
// get last bit of a
a_rem = a & 1;
// get last bit of b
b_rem = b & 1;
// Check if current two bits are same
if (a_rem == b_rem)
xnornum |= (1 << count);
// counter for count bit
count++;
a = a >> 1;
b = b >> 1;
if (a < 1)
break;
}
return xnornum;
}
// Driver function
public static void Main()
{
int a = 10, b = 50;
Console.WriteLine(xnor(a, b));
}
}
// This code is contributed by vt_m
PHP
> 1;
$b = $b >> 1;
}
return $xnornum;
}
// Driver code
$a = 10;
$b = 50;
echo xnor($a, $b);
// This code is contributed by mits.
?>
Javascript
C++
// CPP program to find XNOR of two numbers.
#include
using namespace std;
// Please refer below post for details of this
// function
// https://www.geeksforgeeks.org/toggle-bits-significant-bit/
int togglebit(int n)
{
if (n == 0)
return 1;
// Make a copy of n as we are
// going to change it.
int i = n;
// Below steps set bits after
// MSB (including MSB)
// Suppose n is 273 (binary
// is 100010001). It does following
// 100010001 | 010001000 = 110011001
n |= n >> 1;
// This makes sure 4 bits
// (From MSB and including MSB)
// are set. It does following
// 110011001 | 001100110 = 111111111
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return i ^ n;
}
// Returns XNOR of num1 and num2
int XNOR(int num1, int num2)
{
// if num2 is greater then
// we swap this number in num1
if (num1 < num2)
swap(num1, num2);
num1 = togglebit(num1);
return num1 ^ num2;
}
// Driver code
int main()
{
int num1 = 10, num2 = 20;
cout << XNOR(num1, num2);
return 0;
}
Java
// Java program to find XNOR
// of two numbers
import java.io.*;
class GFG {
// Please refer below post for
// details of this function
// https://www.geeksforgeeks.org/toggle-bits-significant-bit/
static int togglebit(int n)
{
if (n == 0)
return 1;
// Make a copy of n as we are
// going to change it.
int i = n;
// Below steps set bits after
// MSB (including MSB)
// Suppose n is 273 (binary
// is 100010001). It does following
// 100010001 | 010001000 = 110011001
n |= n >> 1;
// This makes sure 4 bits
// (From MSB and including MSB)
// are set. It does following
// 110011001 | 001100110 = 111111111
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return i ^ n;
}
// Returns XNOR of num1 and num2
static int xnor(int num1, int num2)
{
// if num2 is greater then
// we swap this number in num1
if (num1 < num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
num1 = togglebit(num1);
return num1 ^ num2;
}
/* Driver program to test above function */
public static void main(String[] args)
{
int a = 10, b = 20;
System.out.println(xnor(a, b));
}
}
// This code is contributed by Gitanjali
Python
# python program to find XNOR of two numbers
import math
# Please refer below post for details of this function
# https://www.geeksforgeeks.org/toggle-bits-significant-bit/
def togglebit( n):
if (n == 0):
return 1
# Make a copy of n as we are
# going to change it.
i = n
# Below steps set bits after
# MSB (including MSB)
# Suppose n is 273 (binary
# is 100010001). It does following
# 100010001 | 010001000 = 110011001
n = n|(n >> 1)
# This makes sure 4 bits
# (From MSB and including MSB)
# are set. It does following
# 110011001 | 001100110 = 111111111
n |= n >> 2
n |= n >> 4
n |= n >> 8
n |= n >> 16
return i ^ n
# Returns XNOR of num1 and num2
def xnor( num1, num2):
# Make sure num1 is larger
if (num1 < num2):
temp = num1
num1 = num2
num2 = temp
num1 = togglebit(num1)
return num1 ^ num2
# Driver code
a = 10
b = 20
print (xnor(a, b))
# This code is contributed by 'Gitanjali'.
C#
// C# program to find XNOR
// of two numbers
using System;
class GFG {
// Please refer below post for
// details of this function
// https://www.geeksforgeeks.org/toggle-bits-significant-bit/
static int togglebit(int n)
{
if (n == 0)
return 1;
// Make a copy of n as we are
// going to change it.
int i = n;
// Below steps set bits after
// MSB (including MSB)
// Suppose n is 273 (binary
// is 100010001). It does following
// 100010001 | 010001000 = 110011001
n |= n >> 1;
// This makes sure 4 bits
// (From MSB and including MSB)
// are set. It does following
// 110011001 | 001100110 = 111111111
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return i ^ n;
}
// Returns XNOR of num1 and num2
static int xnor(int num1, int num2)
{
// if num2 is greater then
// we swap this number in num1
if (num1 < num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
num1 = togglebit(num1);
return num1 ^ num2;
}
// Driver program
public static void Main()
{
int a = 10, b = 20;
Console.WriteLine(xnor(a, b));
}
}
// This code is contributed by vt_m
PHP
> 1;
// This makes sure 4 bits
// (From MSB and including MSB)
// are set. It does following
// 110011001 | 001100110 = 111111111
$n |= $n >> 2;
$n |= $n >> 4;
$n |= $n >> 8;
$n |= $n >> 16;
return $i ^ $n;
}
// Returns XNOR of num1 and num2
function XNOR($num1, $num2)
{
// if num2 is greater then
// we swap this number in num1
if ($num1 < $num2)
list($num1, $num2)=array($num2, $num1);
$num1 = togglebit($num1);
return $num1 ^ $num2;
}
// Driver code
$num1 = 10;
$num2 = 20;
echo XNOR($num1, $num2);
// This code is contributed by Smitha.
?>
输出:
7
第二种方法:-O(1)
1)找出最多两个给定的数字。
2)切换两个数字中较高者的所有位。
3)返回原始较小数字和修改较大数字的XOR。
C++
// CPP program to find XNOR of two numbers.
#include
using namespace std;
// Please refer below post for details of this
// function
// https://www.geeksforgeeks.org/toggle-bits-significant-bit/
int togglebit(int n)
{
if (n == 0)
return 1;
// Make a copy of n as we are
// going to change it.
int i = n;
// Below steps set bits after
// MSB (including MSB)
// Suppose n is 273 (binary
// is 100010001). It does following
// 100010001 | 010001000 = 110011001
n |= n >> 1;
// This makes sure 4 bits
// (From MSB and including MSB)
// are set. It does following
// 110011001 | 001100110 = 111111111
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return i ^ n;
}
// Returns XNOR of num1 and num2
int XNOR(int num1, int num2)
{
// if num2 is greater then
// we swap this number in num1
if (num1 < num2)
swap(num1, num2);
num1 = togglebit(num1);
return num1 ^ num2;
}
// Driver code
int main()
{
int num1 = 10, num2 = 20;
cout << XNOR(num1, num2);
return 0;
}
Java
// Java program to find XNOR
// of two numbers
import java.io.*;
class GFG {
// Please refer below post for
// details of this function
// https://www.geeksforgeeks.org/toggle-bits-significant-bit/
static int togglebit(int n)
{
if (n == 0)
return 1;
// Make a copy of n as we are
// going to change it.
int i = n;
// Below steps set bits after
// MSB (including MSB)
// Suppose n is 273 (binary
// is 100010001). It does following
// 100010001 | 010001000 = 110011001
n |= n >> 1;
// This makes sure 4 bits
// (From MSB and including MSB)
// are set. It does following
// 110011001 | 001100110 = 111111111
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return i ^ n;
}
// Returns XNOR of num1 and num2
static int xnor(int num1, int num2)
{
// if num2 is greater then
// we swap this number in num1
if (num1 < num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
num1 = togglebit(num1);
return num1 ^ num2;
}
/* Driver program to test above function */
public static void main(String[] args)
{
int a = 10, b = 20;
System.out.println(xnor(a, b));
}
}
// This code is contributed by Gitanjali
Python
# python program to find XNOR of two numbers
import math
# Please refer below post for details of this function
# https://www.geeksforgeeks.org/toggle-bits-significant-bit/
def togglebit( n):
if (n == 0):
return 1
# Make a copy of n as we are
# going to change it.
i = n
# Below steps set bits after
# MSB (including MSB)
# Suppose n is 273 (binary
# is 100010001). It does following
# 100010001 | 010001000 = 110011001
n = n|(n >> 1)
# This makes sure 4 bits
# (From MSB and including MSB)
# are set. It does following
# 110011001 | 001100110 = 111111111
n |= n >> 2
n |= n >> 4
n |= n >> 8
n |= n >> 16
return i ^ n
# Returns XNOR of num1 and num2
def xnor( num1, num2):
# Make sure num1 is larger
if (num1 < num2):
temp = num1
num1 = num2
num2 = temp
num1 = togglebit(num1)
return num1 ^ num2
# Driver code
a = 10
b = 20
print (xnor(a, b))
# This code is contributed by 'Gitanjali'.
C#
// C# program to find XNOR
// of two numbers
using System;
class GFG {
// Please refer below post for
// details of this function
// https://www.geeksforgeeks.org/toggle-bits-significant-bit/
static int togglebit(int n)
{
if (n == 0)
return 1;
// Make a copy of n as we are
// going to change it.
int i = n;
// Below steps set bits after
// MSB (including MSB)
// Suppose n is 273 (binary
// is 100010001). It does following
// 100010001 | 010001000 = 110011001
n |= n >> 1;
// This makes sure 4 bits
// (From MSB and including MSB)
// are set. It does following
// 110011001 | 001100110 = 111111111
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return i ^ n;
}
// Returns XNOR of num1 and num2
static int xnor(int num1, int num2)
{
// if num2 is greater then
// we swap this number in num1
if (num1 < num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
num1 = togglebit(num1);
return num1 ^ num2;
}
// Driver program
public static void Main()
{
int a = 10, b = 20;
Console.WriteLine(xnor(a, b));
}
}
// This code is contributed by vt_m
的PHP
> 1;
// This makes sure 4 bits
// (From MSB and including MSB)
// are set. It does following
// 110011001 | 001100110 = 111111111
$n |= $n >> 2;
$n |= $n >> 4;
$n |= $n >> 8;
$n |= $n >> 16;
return $i ^ $n;
}
// Returns XNOR of num1 and num2
function XNOR($num1, $num2)
{
// if num2 is greater then
// we swap this number in num1
if ($num1 < $num2)
list($num1, $num2)=array($num2, $num1);
$num1 = togglebit($num1);
return $num1 ^ $num2;
}
// Driver code
$num1 = 10;
$num2 = 20;
echo XNOR($num1, $num2);
// This code is contributed by Smitha.
?>
输出 :
1