برنامه جا به جایی بیت های زوج و فرد — راهنمای کاربردی

یک عدد صحیح بدون علامت داده شده است. هدف جا به جایی همه بیت‌های فرد با بیت‌های زوج است. برای مثال، اگر عدد داده شده ۲۳ باشد (۰۰۰۱۰۱۱۱)، این عدد باید به ۴۳ (۰۰۱۰۱۰۱۱) تبدیل شود. هر موقعیت زوج با موقعیت هم‌جوار آن در سمت راست جا به جا می‌شود (موقعیت بیت‌های زوج به صورت بلد شده در نمایش دودویی عدد ۲۳ که در بالا آمده، نمایش داده شده است) و هر بیت دارای موقعیت فرد با موقعیت مجاور آن در سمت چپ جا به جا می‌شود.

اگر نگاه دقیق‌تری به مثال ارائه شده در بالا انداخته شود، می‌توان مشاهده کرد که اساسا نیاز به جا به جایی به راست (Right Shift <<) همه بیت‌های زوج (در مثال بالا، بیت‌های زوج ۲۳ برجسته شده‌اند) به اندازه یک واحد است تا به بیت‌های فرد تبدیل شوند (بیت‌های برجسته شده در ۴۳). همچنین، باید در بیت‌های چپ به اندازه یک واحد شیفت چپ (Left Shift >>) داده شود تا به بیت‌های زوج تبدیل شوند. راهکار ارائه شده در ادامه، بر مبنای این مشاهدات است. در این راهکار فرض بر آن است که عدد ورودی با استفاده از ۳۲ بیت ذخیره‌سازی شده است. فرض می‌شود که عدد ورودی x باشد:

  1. همه بیت‌های زوج x را با انجام عمل «و بیتی» (Bitwise And) برای x با ۰xAAAAAAAA بگیر. عدد ۰xAAAAAAAA یک عدد ۳۲ بیتی با همه مجموعه بیت‌های زوج ۱ و همه بیت‌های فرد ۰ است.
  2. همه بیت‌های فرد را از x با انجام «و بیتی» x با ۰x55555555 بگیر. عدد ۰x55555555 یک عدد ۳۲ بیتی با همه بیت‌های فرد تنظیم شده به عنوان ۱ و همه بیت‌های زوج ۰ است.
  3. همه بیت‌های زوج را به سمت راست شیفت بده.
  4. همه بیت‌های فرد را به سمت چپ شیفت بده.
  5. بیت‌های زوج و فرد جدید را با یکدیگر ترکیب کن و خروجی را بازگردان.

پیاده‌سازی روش بالا در ++C

// C++ program to swap even and  
// odd bits of a given number  
#include <bits/stdc++.h> 
using namespace std; 
  
// Function to swap even  
// and odd bits  
unsigned int swapBits(unsigned int x)  
{  
    // Get all even bits of x  
    unsigned int even_bits = x & 0xAAAAAAAA;  
  
    // Get all odd bits of x  
    unsigned int odd_bits = x & 0x55555555;  
  
    even_bits >>= 1; // Right shift even bits  
    odd_bits <<= 1; // Left shift odd bits  
  
    return (even_bits | odd_bits); // Combine even and odd bits  
}  
  
// Driver code 
int main()  
{  
    unsigned int x = 23; // 00010111  
  
    // Output is 43 (00101011)  
    cout<<swapBits(x);  
  
    return 0;  
}  
  
// This code is contributed by rathbhupendra

پیاده‌سازی روش بالا در C

// C program to swap even and  
// odd bits of a given number 
#include <stdio.h> 
  
// Function to swap even 
// and odd bits 
unsigned int swapBits(unsigned int x) 
{ 
    // Get all even bits of x 
    unsigned int even_bits = x & 0xAAAAAAAA;  
  
    // Get all odd bits of x 
    unsigned int odd_bits  = x & 0x55555555;  
  
    even_bits >>= 1;  // Right shift even bits 
    odd_bits <<= 1;   // Left shift odd bits 
  
    return (even_bits | odd_bits); // Combine even and odd bits 
} 
  
// Driver program to test above function 
int main() 
{ 
    unsigned int x = 23; // 00010111 
  
    // Output is 43 (00101011) 
    printf("%u ", swapBits(x)); 
  
    return 0; 
}

پیاده‌سازی روش بالا در جاوا

// Java program to swap even  
// and odd bits of a given number 
  
class GFG{ 
      
    // Function to swap even 
    // and odd bits 
    static int swapBits(int x) 
    { 
        // Get all even bits of x 
        int even_bits = x & 0xAAAAAAAA;  
      
        // Get all odd bits of x 
        int odd_bits = x & 0x55555555;  
      
        // Right shift even bits 
        even_bits >>= 1;  
          
        // Left shift even bits 
        odd_bits <<= 1;  
          
        // Combine even and odd bits 
        return (even_bits | odd_bits);  
    } 
      
    // Driver program to test above function 
    public static void main(String[] args) 
    { 
        int x = 23; // 00010111 
      
        // Output is 43 (00101011) 
        System.out.println(swapBits(x)); 
    } 
} 
  
// This code is contributed by Smitha Dinesh Semwal

پیاده‌سازی روش بالا در پایتون ۳

# Python 3 program to swap even  
# and odd bits of a given number 
  
# Function for swapping even  
# and odd bits 
def swapBits(x) : 
      
    # Get all even bits of x 
    even_bits = x & 0xAAAAAAAA
  
    # Get all odd bits of x 
    odd_bits = x & 0x55555555
      
    # Right shift even bits 
    even_bits >>= 1
      
    # Left shift odd bits 
    odd_bits <<= 1 
  
    # Combine even and odd bits 
    return (even_bits | odd_bits)  
  
  
# Driver program 
# ۰۰۰۱۰۱۱۱ 
x = 23
  
# Output is 43 (00101011) 
print(swapBits(x)) 
  
  
# This code is contributed  
# by Nikita Tiwari.

پیاده‌سازی روش بالا در #C

// C# program to swap even and odd bits 
// of a given number 
using System; 
  
class GFG { 
      
    // Function to swap even 
    // and odd bits 
    static long swapBits(int x) 
    { 
        // Get all even bits of x 
        long even_bits = x & 0xAAAAAAAA;  
      
        // Get all odd bits of x 
        long odd_bits = x & 0x55555555;  
      
        // Right shift even bits 
        even_bits >>= 1;  
          
        // Left shift even bits 
        odd_bits <<= 1;  
          
        // Combine even and odd bits 
        return (even_bits | odd_bits);  
    } 
      
    // Driver program to test above function 
    public static void Main() 
    { 
          
        int x = 23; // 00010111 
      
        // Output is 43 (00101011) 
        Console.Write(swapBits(x)); 
    } 
} 
  
// This code is contributed by Sam007.

پیاده‌سازی روش بالا در PHP

<?php 
// PHP program to swap even and  
// odd bits of a given number 
  
// Function to swap even 
// and odd bits 
function swapBits( $x) 
{ 
      
    // Get all even bits of x 
    $even_bits = $x & 0xAAAAAAAA;  
  
    // Get all odd bits of x 
    $odd_bits = $x & 0x55555555;  
      
    // Right shift even bits 
    $even_bits >>= 1;  
      
    // Left shift odd bits 
    $odd_bits <<= 1;  
  
    // Combine even and odd bits 
    return ($even_bits | $odd_bits);  
} 
  
// Driver Code 
  
// ۰۰۰۱۰۱۱۱ 
$x = 23;  
  
// Output is 43 (00101011) 
echo swapBits($x); 
  
// This code is contributed by Ajit 
?>

خروجی قطعه کدهای بالا به صورت زیر است.

۴۳

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

منبع [+]

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *