Rumah >pembangunan bahagian belakang >C++ >tukar setiap dua bit dalam setiap dua bait

tukar setiap dua bit dalam setiap dua bait

WBOY
WBOYke hadapan
2023-09-11 23:01:021421semak imbas

tukar setiap dua bit dalam setiap dua bait

Dalam artikel ini, kita akan membincangkan penyelesaian kod untuk menukar setiap bit berselang-seli dalam nombor tertentu dan mengembalikan nombor yang terhasil. Kami akan menyelesaikan masalah ini menggunakan konsep operasi bit untuk menyelesaikan masalah dalam masa yang tetap tanpa menggunakan sebarang gelung.

Pernyataan masalah − Kami diberi nombor n, kami perlu menukar pasangan bit yang bersebelahan antara satu sama lain.

Dengan kata lain, kita perlu menukar setiap bit yang diletakkan ganjil dengan bit yang diletakkan bersebelahan.

Kekangan: Semasa menyelesaikan masalah, kita perlu ingat bahawa kita tidak boleh menggunakan gelung untuk masalah ini, kita perlu melaksanakan kod kita dalam kerumitan masa O(1) sahaja.

Contoh

Input − n = 10011110

Output - Selepas menukar bit genap dan bit ganjil,

nombor binari yang diperolehi ialah: 01101101

Input − n = 10011110

Output - Selepas menukar bit genap dan bit ganjil,

nombor binari yang diperolehi ialah: 01101101

Penjelasan

Mari kita pertimbangkan contoh sebelumnya untuk pemahaman yang lebih baik.

n = 10011110
Even position bits in n are E – 1 x 0 x 1 x 1 x
Odd position bits in n are O – x 0 x 1 x 1 x 0

Untuk hasilnya, kami mahukan bit kedudukan genap pada kedudukan ganjil dan begitu juga sebaliknya

Untuk bit kedudukan genap pada kedudukan ganjil,

Kita perlu menganjakkan kedudukan genap dengan satu kedudukan.

Jadi, untuk bit dalam kedudukan genap, kita cuma tukar E >>

Begitu juga, kita perlu mengalihkan bit kedudukan ganjil ke kiri dengan satu kedudukan untuk mendapatkan kedudukan bit ganjil yang dikehendaki.

Jadi, untuk bit ganjil, kita hanya perlu menukar O

Kini masalah seterusnya ialah mengekstrak bit kedudukan ganjil dan genap.

Seperti yang kita semua tahu,

0x55 = 01010101 in which every only odd position bits are set ( non 0 ).
0xAA = 10101010 in position bits are set. which, only odd

Oleh itu untuk mengekstrak E daripada n, kita hanya perlu melaksanakan

E = n & 0xAA

Begitu juga, untuk mengekstrak O daripada n, kita perlu melakukan-

O = n & 0x55

Sekarang, untuk mencari output yang ditukar,

Langkah

Langkah-langkah yang terlibat ialah-

  • E >>

  • O

    Kini, kami menggabungkan E dan O menggunakan atau operasi.
  • Oleh itu keputusan kami ialah – Keputusan = ( E >> 1 | O

    Terjemahan bahasa Cina bagi Contoh
ialah:

Contoh

Kod untuk kaedah ini adalah seperti berikut:

#include<bits/stdc++.h>
using namespace std;
unsigned int swapbits(unsigned int n) {
   unsigned int E = n & 0xAA ;
   unsigned int O = n & 0x55 ;
   unsigned int result = (E >> 1)|(O << 1);
   return result;
}
int main() {
   unsigned int n = 14;
   cout << "After swapping the even position bits with off position bits, the binary number obtained is " << swapbits(n) << endl;
   return 0;
   // code is contributed by Vaishnavi tripathi
}

Output

After swapping the even position bits with off position bits, the binary number obtained is 13

Kerumitan Masa - Kerumitan masa kaedah ini ialah O(1).

Kerumitan Ruang - Kami tidak menggunakan sebarang ruang tambahan. Kerumitan ruang tambahan ialah O(1).

Atas ialah kandungan terperinci tukar setiap dua bit dalam setiap dua bait. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Dalam C++, teorem MidyArtikel seterusnya:Dalam C++, teorem Midy