Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
73 строки
1.9 KiB
C++
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;
|
|
} |