Напишите программу, которая считывает с консоли три символа и упаковывает их в одно число. Выведите полученное число на консоль. Затем распакуйте число - получите обратно упакованные символы из числа в отдельные переменные.
#include <iostream> int main() { unsigned int packed {}; // переменная, которая хранит упакованное число unsigned char ch {}; // переменная для считывания символа std::cout << "Enter a first character: "; std::cin >> ch; // считываем первый символ packed |= ch; // помещаем первый символ в число std::cout << "Enter a second character: "; std::cin >> ch; // считываем второй символ packed <<= 8; // сдвиг влево на 1 байт - предоставляем место для второго символа packed |= ch; // помещаем второй символ в число std::cout << "Enter a third character: "; std::cin >> ch; // считываем третий символ packed <<= 8; // сдвиг влево на 1 байт - предоставляем место для третьего символа packed |= ch; // помещаем третий символ в число // выводим число на консоль std::cout << packed << std::endl; // распаковка идет в обратном порядке - сначала извлекается третий - последний добавленный символ unsigned int mask {0xFF}; // маска для считывания - 0xFF - максимальное значение символа ch = packed & mask; // применяем маску - выбираем крайний правый байт - третий символ std::cout << ch; ch = (packed >> 8) & mask; // сдвигаем на 1 байт вправо и снова получаем правый байт - второй символ std::cout << ch; ch = (packed >> 16) & mask; // сдвигаем на 2 байта вправо и получаем правый байт - первый символ std::cout << ch << std::endl; }
Пример работы программы:
Enter a first character: e Enter a second character: u Enter a third character: g 6649191 gue
Одна из форм определения цвета представляет запись в формате RGB, где R, G и B - соответственно компоненты красного, зеленого и синего цвета. Каждая компонента может иметь значение от
0 до 255. Например, число 0xffffff в шестнадцатеричном формате представляет цвет, где все три компоненты равны FF
16 или 255
10 в десятичной системе.
Напишите программу, которая считывает с консоли значения для трех компонент цвета и сохраняет их в числовую переменную color.
#include <iostream> int main() { unsigned int color {}; // переменная, которая хранит цвет unsigned int c {}; // переменная для считывания цветовой компоненты std::cout << "Red: "; std::cin >> c; // считываем значение красного цвета color |= c; std::cout << "Green: "; std::cin >> c; //считываем значение красного цвета color <<= 8; color |= c; std::cout << "Blue: "; std::cin >> c; // считываем третий символ color <<= 8; // сдвиг влево на 1 байт - предоставляем место для третьего символа color |= c; // помещаем третий символ в число // выводим числовое значение цвета на консоль std::cout << color << std::endl; }
Пример работы программы:
Red: 15 Green: 14 Blue: 255 986879
Одна из форм определения цвета представляет запись в формате RGB, где R, G и B - соответственно компоненты красного, зеленого и синего цвета. Каждая компонента может иметь значение от
0 до 255. Например, число 0x04F1aA2
16 в шестнадцатеричном формате представляет цвет, где красная компонента равна 04
, зеленая - F1
и
синяя - A2
Пусть дана переменная
unsigned int color {0x04F1A2u}; // переменная, которая хранит цвет
Напишите программу, которая извлекает из этой переменной все три цветовых компоненты в отдельные переменные.
#include <iostream> int main() { unsigned int color {0x04F1A2u}; // переменная, которая хранит цвет unsigned int mask {0xFFu}; // маска для получения цветовых компонент // получаем значение красного цвета unsigned int red {(color >> 16) & mask}; // получаем значение зеленого цвета unsigned int green {(color >> 8) & mask}; // получаем значение синего цвета unsigned int blue {color & mask}; std::cout << "Red: " << red << std::endl; std::cout << "Green: " << green << std::endl; std::cout << "Blue: " << blue << std::endl; // с помощью std::hex можно получить шестнадцатиричное значение std::cout << "red: " << std::hex << red << std::endl; std::cout << "green: " << std::hex << green << std::endl; std::cout << "blue: " << std::hex << blue << std::endl; }
Консольный вывод:
Red: 4 Green: 241 Blue: 162 red: 4 green: f1 blue: a2
Даны следующие переменные:
int a {8}; int b {11};
Напишите программу, которая обменивает значения переменных a и b без использования третьей переменной. Используйте для этого одну из поразрядных операций.
#include <iostream> int main() { int a {8}; // 1000 int b {11}; // 1011 a = a ^ b; // 1000 ^ 1011 = 0011 b = a ^ b; // 0011 ^ 1011 = 1000 a = a ^ b; // 0011 ^ 1000 = 1011 std::cout << "a = " << a << std::endl; std::cout << "b = " << b << std::endl; }
Консольный вывод:
a = 11 b = 8