0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 43
1

Преобразование десятичного числа в шестнадцатиричное

28.04.2018, 09:53. Показов 1353. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нашел на форуме вот такую программку:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
string inttohex(int a)
{
    string tmp("");
    do
    {
        int r(a%16);
        if (r>9) 
        {
            r+=(int)'A'-10;     
        }
        else  
        {
            r+=(int)'0';
        };
        tmp=(char)r+tmp;
        a/=16;
    } 
    while (a);
    return tmp;
}
Преобразование десятичного числа в шестнадцатириное. Но не совсем понятно что делают строки r+=(int)'A'-10; и r+=(int)'0';
Поясните за них, пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2018, 09:53
Ответы с готовыми решениями:

Перевод длинного десятичного числа в шестнадцатиричное
Здравствуйте. Очень интересует меня вопрос: как перевести большое число (до 2^128),...

Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования
Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования (без простого вывода...

Преобразование десятичного числа в двоичное
Написать консольное приложение которое преобразует введенное пользователем с клавиатуры десятичное...

Преобразование десятичного числа в дробь
Собственно не могу придумать код реализации десятичного числа в дробь(например 0.75 = 1/3), может...

6
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,220
28.04.2018, 10:32 2
r+=(int)'A'-10;
r = r + (int)'A' - 10;
(int) 'A' - вместо символа 'A' взять номер этого символа в таблице ASCII

r+=(int)'0';
r = r + (int)'0';
(int)'0' - то же самое, вместо символа '0' взять его номер в таблице ASCII
1
7 / 7 / 8
Регистрация: 19.06.2016
Сообщений: 134
28.04.2018, 10:43 3
Цитата Сообщение от BlackVoron Посмотреть сообщение
Но не совсем понятно что делают строки r+=(int)'A'-10; и r+=(int)'0'
В r получаем число от [0..15], если число больше 9, то ему нужно присвоить символ от [A..F] соответственно, а что бы этот символ получить получить код ascii (что и делает данное выражение r+=(int)'A'-10).
Символ 'A' в ascii = 65(dec), в данном выражение, чтобы получить доступ к нужному символу нужно найти точку отсчёта в таблице ('A'-10) + 12(искомое число) = 65 - 10 + 12 = 67(dec), что равно 'C'. Можно записать это выражение по разному, к примеру: 'B' - 11,'C' - 12,'D' - 13,'E' - 14 и т.д.

r+=(int)'0':
Рассчитывает позицию символов от [0..9] в таблице ASCII, да да они находятся не рядом с буквами и имеют коды [48-57] в десятеричной системе. r = 4(искомая цифра в таблице) + 48 = 52 ('4')
0
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 43
28.04.2018, 10:54  [ТС] 4
stake-k26, а сложно будет эту функцию переписать в рекурсивном виде?
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
30.05.2018, 20:35 5
BlackVoron, здравствуйте! Эту задачу можно решить с помощью манипуляторов потока (отрицательные не учитываются, но можно и их обработать). Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
    int n;
    cout << "Enter an decimal number: ";
    cin >> n;
    string s;
    stringstream ss;
    ss << hex << uppercase << n << "\n";
    ss >> s;
    cout << "A hexdecimal number: " << s << "\n";
    return 0;
}
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
30.05.2018, 20:47 6
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Эту задачу можно решить с помощью манипуляторов потока
зачем усложнять ?
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
int main() {
    int n;
    cout << "Enter an decimal number: ";
    cin >> n;    
    cout << "A hexdecimal number: " <<hex<<n<<"\n";
    return 0;
}
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
30.05.2018, 20:53 7
Yetty, здравствуйте! Спасибо за ваше замечание. Вы верно подметили, что можно проще, но что, если это переведенное шестнадцатеричное число понадобится дальше использовать в программе? Поэтому и поместил его в поток, а вы просто выводите
0
30.05.2018, 20:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2018, 20:53
Помогаю со студенческими работами здесь

Преобразование десятичного числа в шестнадцатеричное
помогите плыз)) написать программу которая преобразует введенное пользователем десятичное число в...

Преобразование десятичного числа в шестнадцатиричное
Как написать функцию которая преобразут десятиричные числа в шеснадцатиричные?

Как получить шестнадцатиричное число из десятичного?
a:=255; Как получить b:='ff'

Преобразование десятичного числа.
Помогите решить задачу: Заданному десятичному числу сопоставить список цифр его 16-ричного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru