ФІО = Горбаченко В.А. Запитання: /* Ефименко. Лаба 3. Варіант 5 Написати функцію, яка для заданого цілого числа x, друкує кількість пар однакових бітів. */ #include #include #include using namespace std; // підключаємо все необхідне для роботи програми void print_bits (unsigned n) { // функція друкує біти, функція з лекії int bit; // змінна, в якій буде знаходитись поточне значення кількості бітів for (bit = sizeof(n)*4-1; bit >= 0; bit--) // початкове значення bit = довжина змінної unsigned { if ((n >> bit) & 01) { // тут іде логічне множення... складно пояснити, але спробую... // (n >> bit) - здвигає на "bit" розрядів // & 01 - логічне множення - тобто, грубо кажучи кусає правіший біт // тут іде побітове множення(чи просто кажучи побітове "і"), для прикладу: // 10101110001101 // & побітове "і" // 00000000000001 тобто тут насправді (01) // = // 00000000000001 - цей результат позитивний, тобто більше нуля, // а значить, грубо кажучи == TRUE putchar (\'1\'); } else {// іначе 0 - наприклад: // 011010 // & // 000001 // = // 000000 - == FALSE або нулю - негативний putchar (\'0\'); } if (bit % 4 == 0) putchar (\' \'); // якщо біт, на якому стоїть лічильник кратний чотирьом, то ставимо пробіл } cout<>1) &01 ) // і передостанній правий біт == 1 || // або (!(n & 01)) // самий правий біт == 0 && // і (!( (n>>1) &01 ) ) // самий правий біт == 0 ) { // тоді ми знайшли пару count++; // кількість пар ++ n>>=2; // здвигаємо на два біти } else // інакше { n>>=1; // здвигаємо на один біт } } while (n != \'\\0\'); // виходимо, коли ми пройдемо всі біти cout<<"\\nNumber of xx = " << count << endl; // виводимо на екран результат } main () { unsigned num; // створюємо цілу беззнакову двохбайтову змінну cout << "Input int" << endl; // підсказка користувачу cin >> num; // зчитуємо число print_bits (num); // друкуємо біти countpar_bits (num); // виводимо кількість пар бітів system ("PAUSE"); return 0; } ====================================