| Код | #include <iostream>
using namespace std;
typedef unsigned short int int16;//тип двухбайтовое целое
void PrintNibble( int16 nibble ) //функция печати тетрады { const int BIT_MASK = 0x8;//маска соответствует двоичному 1000 for( int i = 0; i <= 3; i++ )//для каждого двоичного разряда //сдвигаем на i разрядов влево, тем самым делая текущий выводимый разряд старшим для тетрады //накладываем маску 1000, оставляя только старший разряд //сдвигаем старший разряд на место младшего и выводим его cout << ( ( ( nibble << i ) & BIT_MASK ) >> 3 ); }
void PrintNumber( int16 number ) //функция печати двухбайтного целого { const int NIBBLE_MASK = 0xf000;//маска соответствует старшей тетраде for( int i = 0; i <= 3; i++ )//для каждой тетрады { //сдвигаем на i тетрад влево, тем самым делая текущую выводимую тетраду старшей для числа //накладываем маску , оставляя только старшую тетраду //сдвигаем старшую тетраду на место младшей и выводим ее PrintNibble( ( ( number << ( i << 2 ) ) & NIBBLE_MASK ) >> 12 ); cout << " ";//печатаем пробел } cout << endl;//переводим курсор на новую строку }
int16 GetNumber( int16 a, int16 b ) { //считаю, что нумерация битов начинается с 0 const int16 EVEN_MASK = 0x5555;//четные const int16 ODD_MASK = 0xaaaa;//нечетные //возвращаем число, состоящее из чётных битов а и нечётных битов b return ( a & EVEN_MASK ) | ( b & ODD_MASK ); }
int main() { int16 a, b, result; cout << "Please enter a:" << endl; cin >> a;//вводим целое двухбайтное число cout << "Please enter b:" << endl; cin >> b;//вводим целое двухбайтное число cout << "a:" << endl; PrintNumber( a );//печатаем 1 исходное число cout << "b:" << endl; PrintNumber( b );//печатаем 2 исходное число result = GetNumber( a, b ) ;//вычисляем новое число по условию задачи cout << "Result:" << endl; PrintNumber( result );//печатаем результирующее число return 0;//возвращаем результат }
|
|