Artikel berikut memberikan penjelasan mendalam tentang kaedah yang digunakan untuk mengubah suai nombor dengan menogol bit pertama dan terakhirnya menggunakan operator bitwise ialah operator yang boleh digunakan untuk memanipulasi bit individu dalam nombor binari atau corak bit.
Untuk nombor n yang diberikan, ubah suai nombor supaya bit pertama dan terakhir pengembangan binari nombor baharu diterbalikkan iaitu jika bit asal ialah 1 maka bit terbalik hendaklah 0 dan sebaliknya Semua bit antara bit pertama dan terakhir hendaklah dibiarkan tidak berubah.
Input: 13
Output: 4
Peluasan binari 13 ialah 1101.
Selepas menukar bit pertama dan terakhir, sambungan menjadi 0100, iaitu bersamaan dengan 4.
Oleh itu, hasil keluaran ialah 4.
Input: 27
Output: 10
Peluasan binari 27 ialah 11011.
Selepas menukar bit pertama dan terakhir, sambungan menjadi 01010, iaitu bersamaan dengan 10.
Oleh itu output ialah 10.
Input: 113
Output: 48
Peluasan binari 113 ialah 1110001.
Apabila menogol bit pertama dan terakhir, pengembangan menjadi 0110000 iaitu bersamaan dengan 48.
Oleh itu output ialah 48.
Pendekatan ini menggunakan XOR bitwise dan operator shift kiri Jika bit yang sepadan bagi kedua-dua operan adalah berbeza, operator XOR bitwise menilai kepada 1, jika tidak, ia akan menilai kepada 0. Kami akan menggunakan keupayaan operator XOR bitwise bit. Contohnya, jika bit pertama nombor, n, ialah 1, maka n ^ 1 akan menyebabkan bit pertama nombor itu menjadi 0. Selain itu, jika bit pertama nombor itu ditetapkan kepada 0, operasi n ^ 1 akan menukarnya kepada 1.
Untuk membalikkan digit pertama nombor n, kami mengira n^1. Ia menjalankan operasi XOR, menyongsangkan bit n paling tidak ketara atau pertama dengan 1.
Untuk menyelak digit terakhir, kami menjana nombor k dengan set digit terakhir sahaja. Kedudukan r bit terakhir adalah sama dengan log2(n). Ini kerana bit log2(n) digunakan dalam pengembangan binari n.
Langkah berikut dilakukan untuk melaksanakan pendekatan ini −
Jika n = 1, paparkan 0 dan kembalikan.
Togol bit pertama nombor dengan mengambil XOR bagi n dengan 1.
Tukar digit terakhir nombor dengan XORing n dengan 1<
Paparkan jawapannya.
Mula-mula, mari kita fahami cara pengendali bitwise XOR (^) berfungsi.
Input | Bendera | Input ^ Bendera |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Dapat diperhatikan apabila nilai bendera ialah 1, nilai input akan diterbalikkan.
Pertimbangkan nombor 57. Peluasan binari 57 ialah 111001.
1 | 1 | 1 | 0 | 0 | 1 |
Pertimbangkan nombor 1 baharu.
0 | 0 | 0 | 0 | 0 | 1 |
Untuk menogol bit paling tidak ketara atau paling kiri, lakukan 57^1, hasilnya ialah
1 | 1 | 1 | 0 | 0 | 0 |
Nombor 111000 terhasil.
Kini, untuk menukar digit terakhir, kami mengubah suai nombor 1 supaya digit terakhir ditetapkan bukannya digit pertama. Untuk melakukan ini, kita perlu beralih 1 ke kiri dengan log2(n) tempat, atau dalam kes ini log2(57), iaitu 5. Selepas melakukan ini kami mendapat:
1 | 0 | 0 | 0 | 0 | 0 |
Pengkomputeran XOR kini memberi kita.
0 | 1 | 1 | 0 | 0 | 0 |
生成了数字01100,等于24。将其与原始数字57的二进制展开进行比较,可以观察到最终答案中的第一位和最后一位已经被切换。
因此,答案是24。
函数 toggle_first_bit()
Compute n ^ 1
更新 n
函数 toggle_last_bit()
初始化 r = log2(n)
初始化 k = 1 << r
计算 n ^ k
更新 n
Function main()
初始化 n
如果 (n == 1)
return 0;
Function call toggle_first_bit().
调用函数 toggle_last_bit()。
显示 n.
This program modifies an input number n by toggling the first and the last bit of its binary expansion. It employs bitwise operator XOR and left shift operator to achieve its goal.
// This C++ program toggles the first and the last bit of a number #include <iostream> #include <cmath> using namespace std; // this function flips the last bit of the number // it uses the concept that a log(n) bits are used in the binary expansion of a number n void toggle_last_bit(int& n){ int r = log2(n); // value of r indicates the count of last bit of n int k; // generate a number with log(n) where only the last bit is 1 using the left shift operator k = 1 << r; n = n ^ k; // toggle the last bit of n by computing n XOR k } // this function flips the first bit of the number by computing n XOR 1 void toggle_first_bit(int& n){ n = n ^ 1; } int main(){ int n = 113; cout << "input number = 113" << endl; if(n == 1){ cout << "0"; return 0; } toggle_first_bit(n); // function call to toggle first bit toggle_last_bit(n); // function call to toggle last bit cout << "Number after Toggle First and Last Bits of a Number: "<<n; return 0; }
input number = 113 Number after Toggle First and Last Bits of a Number: 48
时间复杂度 - O(1),因为该算法始终在常数时间内工作,与输入数字无关。
空间复杂度 - O(1),因为在实现中没有使用辅助空间。
本文讨论了一种切换数字的第一个和最后一个位的方法。为了实现这一点,我们使用了位左移运算符来生成新的位模式,使用位异或运算符来计算结果。为了更深入地理解,详细解释了方法的概念、示例的演示、使用的算法、C++程序解决方案以及时间和空间复杂度分析。
Atas ialah kandungan terperinci Tukar digit pertama dan terakhir nombor. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!