Rumah >pembangunan bahagian belakang >C++ >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.
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 yang terlibat ialah-
E >>
Kini, kami menggabungkan E dan O menggunakan atau operasi.
Terjemahan bahasa Cina bagi Contoh
#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 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!