برنامه جا به جایی بیت های زوج و فرد — راهنمای کاربردی
یک عدد صحیح بدون علامت داده شده است. هدف جا به جایی همه بیتهای فرد با بیتهای زوج است. برای مثال، اگر عدد داده شده ۲۳ باشد (۰۰۰۱۰۱۱۱)، این عدد باید به ۴۳ (۰۰۱۰۱۰۱۱) تبدیل شود. هر موقعیت زوج با موقعیت همجوار آن در سمت راست جا به جا میشود (موقعیت بیتهای زوج به صورت بلد شده در نمایش دودویی عدد ۲۳ که در بالا آمده، نمایش داده شده است) و هر بیت دارای موقعیت فرد با موقعیت مجاور آن در سمت چپ جا به جا میشود.
اگر نگاه دقیقتری به مثال ارائه شده در بالا انداخته شود، میتوان مشاهده کرد که اساسا نیاز به جا به جایی به راست (Right Shift <<) همه بیتهای زوج (در مثال بالا، بیتهای زوج ۲۳ برجسته شدهاند) به اندازه یک واحد است تا به بیتهای فرد تبدیل شوند (بیتهای برجسته شده در ۴۳). همچنین، باید در بیتهای چپ به اندازه یک واحد شیفت چپ (Left Shift >>) داده شود تا به بیتهای زوج تبدیل شوند. راهکار ارائه شده در ادامه، بر مبنای این مشاهدات است. در این راهکار فرض بر آن است که عدد ورودی با استفاده از ۳۲ بیت ذخیرهسازی شده است. فرض میشود که عدد ورودی x باشد:
- همه بیتهای زوج x را با انجام عمل «و بیتی» (Bitwise And) برای x با ۰xAAAAAAAA بگیر. عدد ۰xAAAAAAAA یک عدد ۳۲ بیتی با همه مجموعه بیتهای زوج ۱ و همه بیتهای فرد ۰ است.
- همه بیتهای فرد را از x با انجام «و بیتی» x با ۰x55555555 بگیر. عدد ۰x55555555 یک عدد ۳۲ بیتی با همه بیتهای فرد تنظیم شده به عنوان ۱ و همه بیتهای زوج ۰ است.
- همه بیتهای زوج را به سمت راست شیفت بده.
- همه بیتهای فرد را به سمت چپ شیفت بده.
- بیتهای زوج و فرد جدید را با یکدیگر ترکیب کن و خروجی را بازگردان.
پیادهسازی روش بالا در ++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
?>
خروجی قطعه کدهای بالا به صورت زیر است.
۴۳
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش ساختمان دادهها
- مجموعه آموزشهای ساختمان داده و طراحی الگوریتم
- معرفی منابع آموزش ویدئویی هوش مصنوعی به زبان فارسی و انگلیسی
- زبان برنامهنویسی پایتون (Python) — از صفر تا صد
- آموزش ساختمان داده — مجموعه مقالات جامع وبلاگ فرادرس
مجموعه: برنامه نویسی, مهندسی کامپیوتر برچسب ها: برنامه جا به جایی بیت, تغییر موقعیت بیت ها در پایتون, تغییر موقعیت بیت ها در جاوا, جا به جایی بیت, جا به جایی بیت زوج و فرد