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

tukar setiap dua bit dalam setiap dua bait

WBOY
Lepaskan: 2023-09-11 23:01:02
ke hadapan
1425 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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

E = n & 0xAA
Salin selepas log masuk

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

O = n & 0x55
Salin selepas log masuk

Sekarang, untuk mencari output yang ditukar,

Langkah

Langkah-langkah yang terlibat ialah-

  • E >>

  • O << 1
  • Kini, kami menggabungkan E dan O menggunakan atau operasi.
  • Oleh itu keputusan kami ialah – Keputusan = ( E >> 1 | O << 1 )
  • 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
}
Salin selepas log masuk

Output

After swapping the even position bits with off position bits, the binary number obtained is 13
Salin selepas log masuk

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!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan