Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

73 строки
1.9 KiB
C++

#include <cstdint>
#include <iostream>
#include <iomanip>
// Âûâîä îäíîãî áàéòà â hex (äâå öèôðû, âåðõíèé ðåãèñòð).
static void print_byte_hex(uint8_t byte) {
static const char digits[] = "0123456789ABCDEF";
std::cout << digits[byte >> 4] << digits[byte & 0x0F];
}
// Âûâîä 2-áàéòîâîãî ÷èñëà â hex (ìëàäøèé áàéò ïåðâûì, ÷åðåç ïðîáåë).
static void print_hex_uint16(uint16_t value) {
const uint8_t* p = reinterpret_cast<const uint8_t*>(&value);
print_byte_hex(p[0]);
std::cout << ' ';
print_byte_hex(p[1]);
}
// Âûâîä îäíîãî áàéòà â äâîè÷íîì âèäå.
static void print_byte_binary(uint8_t byte) {
for (int bit = 7; bit >= 0; --bit) {
std::cout << ((byte >> bit) & 1);
}
}
// Âûâîä 2-áàéòîâîãî ÷èñëà â äâîè÷íîì âèäå (áåç ïðîáåëà ìåæäó áàéòàìè).
static void print_binary_uint16(uint16_t value) {
const uint8_t* p = reinterpret_cast<const uint8_t*>(&value);
print_byte_binary(p[0]);
print_byte_binary(p[1]);
}
int main() {
uint16_t lhs = 0;
uint16_t rhs = 0;
char op = 0;
if (!(std::cin >> lhs >> op >> rhs)) {
std::cout << "Îøèáêà ââîäà\n";
return 1;
}
uint16_t result = 0;
switch (op) {
case '&': result = lhs & rhs; break;
case '|': result = lhs | rhs; break;
case '^': result = lhs ^ rhs; break;
default:
std::cout << "Îøèáêà: ïîääåðæèâàþòñÿ òîëüêî &, |, ^\n";
return 1;
}
// Îòðàæàåì èñõîäíîå âûðàæåíèå â äåñÿòè÷íîì âèäå
std::cout << lhs << ' ' << op << ' ' << rhs << '\n';
// Hex-ïðåäñòàâëåíèå
print_hex_uint16(lhs);
std::cout << ' ' << op << ' ';
print_hex_uint16(rhs);
std::cout << " = ";
print_hex_uint16(result);
std::cout << '\n';
// Binary-ïðåäñòàâëåíèå
print_binary_uint16(lhs);
std::cout << ' ' << op << '\n';
print_binary_uint16(rhs);
std::cout << " =\n";
print_binary_uint16(result);
std::cout << '\n';
return 0;
}