Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2022, 12:06   #1
Vi_Nurovskaya
Новичок
Джуниор
 
Регистрация: 08.07.2022
Сообщений: 2
Вопрос Помогите разобрать как работает код C++

Всем доброго времени суток! В программе есть такой код, но я не могу понять как именно он работает.
Всем спасибо!

Вот эта часть кода:

int FС::hexToInt(char hexSymbol) {
const char SMALLEST_HEX_LETTER = 'A';
const char BIGGEST_HEX_LETTER = 'F';
const int SMALLEST_LETTER_VALUE = 10;
if (hexSymbol >= SMALLEST_HEX_LETTER && hexSymbol <= BIGGEST_HEX_LETTER)
return hexSymbol - SMALLEST_HEX_LETTER + SMALLEST_LETTER_VALUE;

const char SMALLEST_DIGIT = '0';
const char BIGGEST_DIGIT = '9';
if (hexSymbol >= SMALLEST_DIGIT && hexSymbol <= BIGGEST_DIGIT)
return hexSymbol - SMALLEST_DIGIT;

throw std::logic_error("Error");
Vi_Nurovskaya вне форума Ответить с цитированием
Старый 08.07.2022, 15:26   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

И зачем было писать столько лишних символов. Тут 5 строчек объявления констант, которые надо просто заменить на их значения
Код:
const char SMALLEST_HEX_LETTER = 'A';
const char BIGGEST_HEX_LETTER = 'F';
const int SMALLEST_LETTER_VALUE = 10;
...
const char SMALLEST_DIGIT = '0';
const char BIGGEST_DIGIT = '9';
. Если подставить в оставшийся код значения из этих строчек, тогда получится следующее
Код:
if (hexSymbol >= 'A' && hexSymbol <= 'F') return hexSymbol - 'A' + 10;
if (hexSymbol >= '0' && hexSymbol <= '9') return hexSymbol - '0';
throw std::logic_error("Error");
Далее все становится предельно просто. В условиях проверяется попадание символа в диапазон символов: от 'A' до 'F' - в первом; от '0' до '9' - во втором. Если символ попадает в один из этих диапазонов, тогда вычисляется шестнадцатеричная бинарная цифра соответствующая этому символу. Вычитается из заданного значения минимальное значение для диапазона, а для букв еще и прибавляется 10 как значения цифры равной букве A (для '0' это значение прибавлять просто не имеет смысла). Если символ не попадает ни в один из этих диапазонов, тогда программа доходит до 3-ей строчки и возникает ошибка.
macomics вне форума Ответить с цитированием
Старый 09.07.2022, 08:35   #3
Vi_Nurovskaya
Новичок
Джуниор
 
Регистрация: 08.07.2022
Сообщений: 2
По умолчанию

macomics, Огромное спасибо!
Vi_Nurovskaya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобрать пакет vipok72 Безопасность, Шифрование 5 17.08.2017 12:18
C++ Помогите разобрать задачи ubisoftMD Помощь студентам 19 19.09.2016 21:40
Помогите разобрать алгоритм kalumb Общие вопросы Delphi 3 09.01.2016 21:52
Помогите разобрать код Delphi Кари Помощь студентам 0 14.05.2015 22:32