XNOR de dos números

XNOR da el reverso de XOR si es un bit binario. 
 

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.

Es el reverso de XOR pero no podemos implementarlo directamente así que este es el programa para implementar XNOR 
Ejemplos: 
 

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

Primer método: – (O (logn)) En esta solución verificamos un bit a la vez. Si dos bits son iguales, ponemos 1 en el resultado, de lo contrario ponemos 0.
Entendámoslo con el siguiente código 
 

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>
Producción

7

Segundo método: – O (1) 
1) Encuentra el máximo de dos números dados. 
2) Alternar todos los bits en mayor de dos números. 
3) Devuelve el XOR del número original más pequeño y el número más grande modificado. 
 

C++

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

<?php
// PHP program to find XNOR
// of two numbers.
 
// Please refer below post
// for details of this function
// https://www.geeksforgeeks.org/toggle-bits-significant-bit/
 
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
// https://www.geeksforgeeks.org/toggle-bits-significant-bit/
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>
Producción

1

Tercer método: usar XOR

XNOR de A y B es simplemente el inverso de A XOR B. El problema de invertir directamente un número binario es que hace que los ceros iniciales también se inviertan, por lo tanto, es necesario construir una máscara de bits para extraer solo los bits reales del numero invertido 

Esta implementación se muestra a continuación:

C++

// CPP program to find XNOR of two numbers.
#include <bits/stdc++.h>
using namespace std;
 
// Returns XNOR of num1 and num2
unsigned int XNOR(int a, int b)
{
    //getting the number of bits from
    //max of a and b to construct the bit mask
    int numOfBits = log2(max(a, b));
    //constructing the bit mask
    unsigned mask = (1 << numOfBits) - 1;
    //xnor = inverted xor
    unsigned xnor = ~(a ^ b);
    //getting only the required bits
    //using the mask
    return xnor & mask;
}
  
// Driver code
int main()
{
    int num1 = 7, num2 = 19;
      //function call
    cout << XNOR(num1, num2);
    return 0;
}
 
//this code is contributed by phasing17

Java

// Java program to find XNOR of two numbers.
class GFG {
 
  // Returns XNOR of num1 and num2
  static int XNOR(int a, int b)
  {
    // getting the number of bits from
    // max of a and b to construct the bit mask
    int numOfBits = (int)(Math.log(Math.max(a, b)) / Math.log(2));
 
    // constructing the bit mask
    int mask = (1 << numOfBits) - 1;
 
    // xnor = inverted xor
    int xnor = ~(a ^ b);
 
    // getting only the required bits
    // using the mask
    return xnor & mask;
  }
 
  // Driver code
  public static void main(String[] args)
  {
    int num1 = 7, num2 = 19;
 
    // function call
    System.out.print(XNOR(num1, num2));
  }
}
 
// this code is contributed by phasing17

Python3

# Python3 program to find XNOR of two numbers.
import math
 
# Returns XNOR of num1 and num2
def XNOR(a, b):
 
    # getting the number of bits from
    # max of a and b to construct the bit mask
    numOfBits = int(math.log(max(a, b), 2))
 
    # constructing the bit mask
    mask = (1 << numOfBits) - 1
 
    # xnor = inverted xor
    xnor = ~(a ^ b)
 
    # getting only the required bits
    # using the mask
    return xnor & mask
 
 
# Driver code
num1 = 7
num2 = 19
 
# function call
print(XNOR(num1, num2))
 
# This code is contributed by phasing17

C#

// C# program to find XNOR of two numbers.
 
using System;
 
class GFG {
 
  // Returns XNOR of num1 and num2
  static int XNOR(int a, int b)
  {
    // getting the number of bits from
    // max of a and b to construct the bit mask
    int numOfBits = (int)(Math.Log(Math.Max(a, b)) / Math.Log(2));
 
    // constructing the bit mask
    int mask = (1 << numOfBits) - 1;
 
    // xnor = inverted xor
    int xnor = ~(a ^ b);
 
    // getting only the required bits
    // using the mask
    return xnor & mask;
  }
 
 
  // Driver code
  public static void Main(string[] args)
  {
    int num1 = 7, num2 = 19;
 
    // Function call
    Console.Write(XNOR(num1, num2));
  }
}
 
// this code is contributed by phasing17

Javascript

// JavaScript program to find XNOR of two numbers.
 
 
// Returns XNOR of num1 and num2
function XNOR(a, b)
{
    //getting the number of bits from
    //max of a and b to construct the bit mask
    let numOfBits = Math.floor(Math.log2(Math.max(a, b)));
    //constructing the bit mask
    let mask = (1 << numOfBits) - 1;
    //xnor = inverted xor
    let xnor = ~(a ^ b);
    //getting only the required bits
    //using the mask
    return xnor & mask;
}
  
// Driver code
let num1 = 7, num2 = 19;
 
//function call
console.log(XNOR(num1, num2));
 
 
//this code is contributed by phasing17
Producción

11

Complejidad de tiempo : O(1)

Espacio Auxiliar : O(1)

Publicación traducida automáticamente

Artículo escrito por DevanshuAgarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *