Intercambiar dos nibbles en un byte

Un nibble es una agregación de cuatro bits, o medio octeto. Hay dos nibbles en un byte. 
Dado un byte, intercambie los dos nibbles que contiene. Por ejemplo, 100 se representa como 01100100 en un byte (u 8 bits). Los dos nibbles son (0110) y (0100). Si intercambiamos los dos nibbles, obtenemos 01000110 que es 70 en decimal.
 

Para intercambiar los nibbles, podemos usar los operadores bit a bit &, bit a bit ”. Un byte se puede representar utilizando un carácter sin firmar en C, ya que el tamaño del carácter es de 1 byte en un compilador típico de C. 
A continuación se muestra la implementación de la idea anterior. 
 

C++

// C++ program to swap two
// nibbles in a byte
#include <bits/stdc++.h>
using namespace std;
 
int swapNibbles(int x)
{
    return ( (x & 0x0F) << 4 | (x & 0xF0) >> 4 );
}
 
// Driver code
int main()
{
    int x = 100;
    cout << swapNibbles(x);
    return 0;
}
 
//This code is contributed by Shivi_Aggarwal

C

#include <stdio.h>
 
unsigned char swapNibbles(unsigned char x)
{
    return ( (x & 0x0F)<<4 | (x & 0xF0)>>4 );
}
 
int main()
{
    unsigned char x = 100;
    printf("%u", swapNibbles(x));
    return 0;
}

Java

// Java program to swap two
// nibbles in a byte
 
class GFG {
     
static int swapNibbles(int x)
{
    return ((x & 0x0F) << 4 | (x & 0xF0) >> 4);
}
 
// Driver code
public static void main(String arg[])
{
    int x = 100;
    System.out.print(swapNibbles(x));
}
}
 
// This code is contributed by Anant Agarwal.

Python3

# python program Swap
# two nibbles in a byte
 
def swapNibbles(x):
    return ( (x & 0x0F)<<4 | (x & 0xF0)>>4 )
 
# Driver code
 
x = 100
print(swapNibbles(x))
 
# This code is contributed
# by Anant Agarwal.

C#

// C# program to swap two
// nibbles in a byte
using System;
 
class GFG {
 
// Function for swapping   
static int swapNibbles(int x)
{
    return ((x & 0x0F) << 4 |
            (x & 0xF0) >> 4);
}
 
// Driver code
public static void Main()
{
    int x = 100;
    Console.Write(swapNibbles(x));
}
}
 
// This code is contributed by Nitin Mittal.

PHP

<?php
// PHP program to swap two
// nibbles in a byte
 
// function to Swap two nibbles
// in a byte in php program
function swapNibbles($x)
{
    return ( ($x & 0x0F) << 4 |
           ($x & 0xF0) >> 4 );
}
 
    // Driver Code
    $x = 100;
    echo swapNibbles($x);
 
// This Code is Contributed by Ajit
?>

Javascript

<script>
// javascript program to swap two
// nibbles in a byte  
function swapNibbles(x)
{
    return ((x & 0x0F) << 4 | (x & 0xF0) >> 4);
}
 
// Driver code
var x = 100;
document.write(swapNibbles(x));
 
// This code is contributed by Princi Singh
</script>
Producción

70

Explicación: 
100 es 01100100 en binario. La operación se puede dividir principalmente en dos partes 
1) La expresión “ x & 0x0F ” nos da los últimos 4 bits de x. Para x = 100, el resultado es 00000100. Usando el operador bit a bit ‘<<‘, desplazamos los últimos cuatro bits a la izquierda 4 veces y convertimos los nuevos últimos cuatro bits en 0. El resultado después del desplazamiento es 01000000.
2) La expresión “ x & 0xF0 ” nos da los primeros cuatro bits de x. Para x = 100, el resultado es 01100000. Usando el operador bit a bit ‘>>’, desplazamos el dígito a la derecha 4 veces y convertimos los primeros cuatro bits en 0. El resultado después del desplazamiento es 00000110.
Al final usamos el OR bit a bit ‘|’ funcionamiento de las dos expresiones explicadas anteriormente. El operador OR coloca el primer nibble al final y el último al primero. Para x = 100, el valor de (01000000) OR (00000110) da como resultado 01000110 que es igual a 70 en decimal.
Este artículo es una contribución de Anuj Garg . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Otro enfoque:

Usar valores binarios en lugar de hexadecimales. Es mucho más claro para los principiantes.

Paso 1: Tome & de 00001111 con el número para obtener el mordisco correcto, es decir, 0b00001111 & N

Paso 2: Tome & de 11110000 con el número para obtener el nibble izquierdo, es decir, 0b11110000 & N

Paso 3: Desplace a la izquierda el nibble derecho obtenido en el paso 1 en 4 posiciones para obtenerlo como nibble izquierdo en la respuesta final, es decir <<4

Paso 4: Desplace a la derecha el nibble izquierdo obtenido en el paso 2 en 4 posiciones para obtenerlo como nibble derecho en la respuesta final >>4

Paso 5: Realice la operación o ( | ) entre los valores obtenidos en los pasos 3 y 4 para obtener la respuesta

C++

// C++ program to swap two
// nibbles in a byte
#include <bits/stdc++.h>
using namespace std;
 
 int swapNibbles(int N) {
      // Step 1
        int right = (N & 0b00001111);
      // Step 3
        right= (right<<4);
      // Step 2
        int left = (N & 0b11110000);
      // Step 4
        left = (left>>4);
      // Step 5
        return (right | left);
    }
 
// Driver code
int main()
{
    int n = 100;
    cout << "Original: " << n << " Swapped: " << swapNibbles(n);
         
    return 0;
}
 
// This code is contributed by sanjoy_62.

Java

/*package whatever //do not write package name here */
 
import java.io.*;
class Solution{
    static int swapNibbles(int N) {
      // Step 1
        int right = (N & 0b00001111);
      // Step 3
        right= (right<<4);
      // Step 2
        int left = (N & 0b11110000);
      // Step 4
        left = (left>>4);
      // Step 5
        return (right | left);
    }
}
class GFG {
    public static void main (String[] args) {
      Solution s = new Solution();
      int n = 100;
        System.out.println("Original: "+ n + " Swapped: " + s.swapNibbles(n));
    }
}

Python3

# Python code for the above approach
from math import ceil, sqrt
 
def swapNibbles(N) :
     
    # Step 1
    right = (N & 0b00001111)
     
    # Step 3
    right= (right<<4)
     
    # Step 2
    left = (N & 0b11110000)
       
    # Step 4
    left = (left>>4)
     
    # Step 5
    return (right | left)
 
# Driver Code
n = 100;
print("Original: ", n, end = " ")
print(" Swapped: " , swapNibbles(n))
 
# This code is contributed by code_hunt.

C#

// C# program to swap two
// nibbles in a byte
using System;
 
public class GFG{
 
  static int swapNibbles(int N) {
    // Step 1
    int right = (N & 0b00001111);
    // Step 3
    right= (right<<4);
    // Step 2
    int left = (N & 0b11110000);
    // Step 4
    left = (left>>4);
    // Step 5
    return (right | left);
  }
 
  // Driver Code
  static public void Main (){
    int n = 100;
    Console.Write("Original: "+ n + " Swapped: " + swapNibbles(n));
  }
}
 
// This code is contributed by shruti456rawal

Javascript

// JavaScript code for the above approach
function swapNibbles(N)
{
     
    // Step 1
    var right = (N & 0b00001111);
     
    // Step 3
    var right= (right<<4);
     
    // Step 2
    var left = (N & 0b11110000);
       
    // Step 4
    var left = (left>>4);
     
    // Step 5
    return (right | left);
 
}
 
// Driver Code
var n = 100;
console.log("Original:", n, " Swapped:", swapNibbles(n));
 
// This code is contributed by phasing17
Producción

Original: 100 Swapped: 70

Este artículo es una contribución de Arvind Bakshi . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *