两个数的XNOR

XNOR给出了二进制位的异或相反。

null
First bit | Second bit | XNOR  0             0           10             1           01             0           01             1           1It gives 1 if bits are same else if  bits are different it gives 0.

它与XOR相反,但我们不能直接实现它,所以这是实现XNOR的程序 例如:

Input  : 10 20Output : 1Binary of 20 is 10100Binary of 10 is  1010So the XNOR is  00001So output is 1Input  : 10 10Output : 15Binary of 10 is  1010Binary of 10 is  1010So the XNOR is   1111So output is 15

第一种方法:-(O(logn)) 在这个解决方案中,我们一次检查一位。如果两位相同,我们在结果中放入1,否则放入0。 让我们用下面的代码来理解它

C++

// CPP program to find
// XNOR of two numbers
#include <iostream>
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

<?php
// PHP program to find
// XNOR of two numbers
// log(n) solution
function xnor( $a , $b )
{
// Make sure a is larger
if ( $a < $b )
list( $a , $b ) = array ( $b , $a );
if ( $a == 0 && $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 xnornum
$count = 0;
// to make new xnor number
$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
$a = 10;
$b = 50;
echo xnor( $a , $b );
// This code is contributed by mits.
?>


Javascript

<script>
// javascript program to find
// XNOR of two numbers
function xnor(a, b)
{
// Make sure a is larger
if (a < b)
{
// swapping a and b;
let t = a;
a = b;
b = t;
}
if (a == 0 && b == 0)
return 1;
// for last bit of a
let a_rem = 0;
// for last bit of b
let b_rem = 0;
// counter for count bit
// and set bit in xnornum
let count = 0;
// to make new xnor number
let 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
let a = 10, b = 50;
document.write(xnor(a, b));
// This code is contributed by susmitakundugoaldanga.
</script>


输出:

7

第二种方法:-O(1) 1) 求两个给定数字中的最大值。 2) 切换所有位 以两个数字中的较高者为单位。 3) 返回原始较小数字和修改后较大数字的异或。

C++

// CPP program to find XNOR of two numbers.
#include <iostream>
using namespace std;
// Please refer below post for details of this
// function
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
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
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
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

<?php
// PHP program to find XNOR
// of two numbers.
// Please refer below post
// for details of this function
function 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 >> 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.
?>


Javascript

<script>
// Javascript program to find XNOR of two numbers.
// Please refer below post for details of this
// function
function togglebit(n)
{
if (n == 0)
return 1;
// Make a copy of n as we are
// going to change it.
let 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
function XNOR(num1, num2)
{
// if num2 is greater then
// we swap this number in num1
if (num1 < num2) {
let temp = num1;
num1 = num2;
num2 = temp;
}
num1 = togglebit(num1);
return num1 ^ num2;
}
// Driver code
let num1 = 10, num2 = 20;
document.write(XNOR(num1, num2));
</script>


输出:

1

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享