Рубрики

Поменяйте местами все нечетные и четные биты

Если задано целое число без знака, поменяйте местами все нечетные биты с четными. Например, если заданное число равно 23 ( 0 0 0 1 0 1 1 1), его следует преобразовать в 43 (0 0 1 0 1 0 1 1 ). Каждый бит четной позиции заменяется смежным битом на правой стороне (четные биты позиции выделяются в двоичном представлении 23), а каждый бит нечетной позиции заменяется соседним слева.

Если мы более внимательно посмотрим на пример, мы можем заметить, что нам нужно сдвинуть вправо (>>) все четные биты (в приведенном выше примере четные биты 23 выделены) на 1, чтобы они стали нечетными битами (выделены в 43) и сдвиг влево (<<) всех нечетных битов на 1, чтобы они стали четными. Следующее решение основано на этом наблюдении. Решение предполагает, что входной номер хранится с использованием 32 бит.

Пусть входное число будет х
1) Получите все четные биты x, выполнив побитовое и x с 0xAAAAAAAA. Число 0xAAAAAAAA представляет собой 32-разрядное число, в котором все четные биты установлены в 1, а все нечетные биты равны 0.
2) Получите все нечетные биты x, выполнив побитовое и x с 0x55555555. Число 0x55555555 — это 32-разрядное число, в котором все нечетные биты установлены в 1, а все четные биты в 0.
3) Сместить вправо все четные биты.
4) Сдвиньте влево все нечетные биты.
5) Объединить новые четные и нечетные биты и вернуть.

C ++

// C ++ программа для обмена даже и
// нечетные биты заданного числа
#include <bits/stdc++.h>

using namespace std;

  
// Функция для обмена даже
// и нечетные биты

unsigned int swapBits(unsigned int x) 

    // Получить все четные биты х

    unsigned int even_bits = x & 0xAAAAAAAA; 

  

    // Получить все нечетные биты х

    unsigned int odd_bits = x & 0x55555555; 

  

    even_bits >>= 1; // вправо сдвигать четные биты

    odd_bits <<= 1; // нечетные биты сдвига влево

  

    return (even_bits | odd_bits); // Объединяем четные и нечетные биты

  
// Код драйвера

int main() 

    unsigned int x = 23; // 00010111

  

    // Вывод 43 (00101011)

    cout<<swapBits(x); 

  

    return 0; 

  
// Этот код предоставлен rathbhupendra

С

// C программа для обмена даже и
// нечетные биты заданного числа
#include <stdio.h>

  
// Функция для обмена даже
// и нечетные биты

unsigned int swapBits(unsigned int x)

{

    // Получить все четные биты х

    unsigned int even_bits = x & 0xAAAAAAAA; 

  

    // Получить все нечетные биты х

    unsigned int odd_bits  = x & 0x55555555; 

  

    even_bits >>= 1;  // вправо сдвигать четные биты

    odd_bits <<= 1;   // нечетные биты сдвига влево

  

    return (even_bits | odd_bits); // Объединяем четные и нечетные биты

}

  
// Программа драйвера для проверки вышеуказанной функции

int main()

{

    unsigned int x = 23; // 00010111

  

    // Вывод 43 (00101011)

    printf("%u ", swapBits(x));

  

    return 0;

}

Джава

// Java-программа для обмена даже
// и нечетные биты заданного числа

  

class GFG{

      

    // Функция для обмена даже

    // и нечетные биты

    static int swapBits(int x)

    {

        // Получить все четные биты х

        int even_bits = x & 0xAAAAAAAA

      

        // Получить все нечетные биты х

        int odd_bits = x & 0x55555555

      

        // вправо сдвигать четные биты

        even_bits >>= 1

          

        // сдвиг влево на четные биты

        odd_bits <<= 1

          

        // Объединяем четные и нечетные биты

        return (even_bits | odd_bits); 

    }

      

    // Программа драйвера для проверки вышеуказанной функции

    public static void main(String[] args)

    {

        int x = 23; // 00010111

      

        // Вывод 43 (00101011)

        System.out.println(swapBits(x));

    }

}

  
// Этот код предоставлен Smitha Dinesh Semwal

Python 3

# Python 3 программа для обмена даже
# и нечетные биты заданного числа

  
# Функция для обмена даже
# и нечетные биты

def swapBits(x) :

      

    # Получить все четные биты х

    even_bits = x & 0xAAAAAAAA

  

    # Получить все нечетные биты х

    odd_bits = x & 0x55555555

      

    # Правое смещение четных бит

    even_bits >>= 1

      

    # Нечетные биты сдвига влево

    odd_bits <<= 1 

  

    # Объединить четные и нечетные биты

    return (even_bits | odd_bits) 

  

  
# Драйверная программа
# 00010111

x = 23

  
# Вывод 43 (00101011)

print(swapBits(x))

  

  
# Этот код добавлен
# Никита Тивари.

C #

// C # программа для замены четных и нечетных битов
// данного числа

using System;

  

class GFG {

      

    // Функция для обмена даже

    // и нечетные биты

    static long swapBits(int x)

    {

        // Получить все четные биты х

        long even_bits = x & 0xAAAAAAAA; 

      

        // Получить все нечетные биты х

        long odd_bits = x & 0x55555555; 

      

        // вправо сдвигать четные биты

        even_bits >>= 1; 

          

        // сдвиг влево на четные биты

        odd_bits <<= 1; 

          

        // Объединяем четные и нечетные биты

        return (even_bits | odd_bits); 

    }

      

    // Программа драйвера для проверки вышеуказанной функции

    public static void Main()

    {

          

        int x = 23; // 00010111

      

        // Вывод 43 (00101011)

        Console.Write(swapBits(x));

    }

}

  
// Этот код предоставлен Sam007.

PHP

<?php
// PHP программа для обмена даже и
// нечетные биты заданного числа

  
// Функция для обмена даже
// и нечетные биты

function swapBits( $x)

{

      

    // Получить все четные биты х

    $even_bits = $x & 0xAAAAAAAA; 

  

    // Получить все нечетные биты х

    $odd_bits = $x & 0x55555555; 

      

    // вправо сдвигать четные биты

    $even_bits >>= 1; 

      

    // нечетные биты сдвига влево

    $odd_bits <<= 1; 

  

    // Объединяем четные и нечетные биты

    return ($even_bits | $odd_bits); 

}

  
// Код драйвера

  
// 00010111

$x = 23; 

  
// Вывод 43 (00101011)

echo swapBits($x);

  
// Этот код предоставлен Ajit
?>

Выход:

 43 

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Поменяйте местами все нечетные и четные биты

0.00 (0%) 0 votes