Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/692: Рейтинг темы: голосов - 692, средняя оценка - 4.80
3 / 3 / 0
Регистрация: 25.04.2020
Сообщений: 131

Перевод чисел из десятичной системы в четверичную

24.10.2020, 12:54. Показов 152304. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Используя алгоритм перевода чисел из десятичной системы в четверичную(последовательно делить число на q, т.е. на основание СС) и цикл while, написать программу перевода числа -173 в 4 систему счисления. Результат вывести в двухбайтовом формате.
Срочно, пожалуйста!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.10.2020, 12:54
Ответы с готовыми решениями:

Рекурсивный перевод чисел из десятичной системы счисления в шестнадцатеричную
Есть код для рекурсивного перевода чисел из десятичной системы счисления в шестнадцатеричную. Проблема в том, что если при n == 0 вернуть...

Перевод из десятичной системы в четверичную
Необходимо написать программу, переводящую целые числа из десятичной системы счисления в четверичную. Заранее спасибо!

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

17
3 / 3 / 0
Регистрация: 25.04.2020
Сообщений: 131
24.10.2020, 16:07  [ТС]
уже есть начало, нужно только в двухбайтовый формат перевести, не знаю как.

Python
1
2
3
4
5
6
7
n = int(input())
b = ''
while n > 0:
    b = str(n % 4) + b
    n = n // 4
 
print(b)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
25.10.2020, 14:12
1LEX, Проверяю правильно ли работает Ваш код.
Ваш код выдает число 2231
Python
1
2
3
4
>>> int('2231', 4)
173
>>> int('-2231', 4)
-173
То есть Ваш код выдает модуль числа -173 в 4СС Результат Вашего кода нужно еще умножить на -1 .
Теперь по поводу
Цитата Сообщение от 1LEX Посмотреть сообщение
Результат вывести в двухбайтовом формате.
Упоминание о байтовом формате говорит о том, что под число должно отводится 2 байта, даже если оно занимает меньше байт.
Как сделать это в шестнадцатеричной 0xXXX , восьмеричной 0oXXX, двоичной 0bXXXXXX формах записи (везде спереди стоит ноль) я знаю. Но есть ли в питоне четверичная форма записи, я не знаю, не встречал.
Само число занимает один байт, что бы разместить его в двух байтах нужно просто добавить спереди нулевой байт.
В двоичной форме записи это будет выглядеть так
Python
1
2
3
4
>>> int('-0b10101101', 2)
-173
>>> int('-0b0000000010101101', 2)
-173
Добавлено через 11 минут
Может кто то знает о существовании в питоне четверичной формы записи? Если она существует, я бы дополнил этой информацией свою базу данных.
1
 Аватар для vpArth
48 / 43 / 10
Регистрация: 20.10.2020
Сообщений: 99
25.10.2020, 14:15
-1 в четверичной системе счисления в 2 байтах выглядит как 33333333
-173, соответственно 33331103
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
25.10.2020, 14:25
1LEX, Может тот кто писал условие задачи имел ввиду под фразой
Цитата Сообщение от 1LEX Посмотреть сообщение
Результат вывести в двухбайтовом формате.
что число нужно вывести как -00002231 . Но это уже осуществляется с помощью форматирования вывода на экран. Что подразумевается под данной фразой выясняйте у того, кто давал задание.
0
 Аватар для vpArth
48 / 43 / 10
Регистрация: 20.10.2020
Сообщений: 99
25.10.2020, 14:27
Python
1
2
3
4
5
6
7
8
9
10
11
12
def convert_base(value, base, length=16):
    if value < 0:
        value = ( 1<<length ) + value
 
    res = ''
    while value > 0:
        res = str(value % base) + res
        value //= base
 
    return res
 
print(convert_base(-173, 4)) # 33331103
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
25.10.2020, 17:00
vpArth, Спасибо за замечание. У меня была такая мысль, но поленился опять вспоминать о представлении отрицательных чисел в питоне. Приемы дополнения и так далее.

Добавлено через 2 часа 32 минуты
vpArth, На самом деле все не так просто. Ваш подход верен только для 4-х разрядных вычислительных систем, то есть только для определенных видов математических вычислений. Для современных компьютеров такой подход не пригоден, так как в байте не 4, а 8 бит и при этом может использоваться только двоичная система счисления, так как бит может иметь только 0 и 1 . Поэтому компьютер при преобразовании числа 33331103 представленного в четверичной системе счисления выдаст нам десятичное число 65363
Python
1
2
>>> int('33331103', 4)
65363
, а не -147 .
И -1 в 8_и битовом компьютере будет не 33333333 , а будет 11111111 .
В 4_х битовом компьютере -1 будет выглядеть так, 1111 .
Поэтому Ваши вычисления не имеют никакого отношения к байтам компьютера, а годятся только для математических вычислений относящихся к четырехзначной системе счисления, где нет понятия байта а оперируют понятием разрядности.
В общем то это претензии не к Вам, а к составителю условия задачи. По моему не правильно число содержащее 4 разряда называть байтом.
Я уже давно не занимался математикой, но это скорее математическая задача, в которой не все ясно, например определение понятия байта.
0
 Аватар для vpArth
48 / 43 / 10
Регистрация: 20.10.2020
Сообщений: 99
25.10.2020, 17:06
О чём вы? Речь была о двухбайтном слове, где -1 = 1111111111111111b или 33333333(4)

При чём тут 4-х разрядные системы?
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
25.10.2020, 17:08
Если рассматривать 4-х разрядные микропроцессоры то там -1 будет выглядеть так 1111 . Вообще все что касается вычислительной техники в разряде (бите) может содержать только 0 или 1 , но никак не 3.
Да есть формальные формы записи как я писал выше, шестнадцатеричные , восьмеричные, двоичные. Но четверичной формы записи в питоне по моему нет.
0
 Аватар для vpArth
48 / 43 / 10
Регистрация: 20.10.2020
Сообщений: 99
25.10.2020, 17:12
То о чём вы говорите — это беззнаковое представление знакового числа:

C++
1
2
3
4
5
6
7
#include <iostream>
int main() {
    using namespace std;
 
    uint16_t a = -173;
    cout << a << endl; // 65363
}

На моём 64х разрядном процессоре значение -1 шириной в 1 байт всё ещё 255. А шириной в 2 байта - 65535. Железо тут вовсе ни при чём.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
25.10.2020, 17:18
Цитата Сообщение от vpArth Посмотреть сообщение
33333333(4)
не является в питоне двухбайтовым словом, так как в питоне нет такой записи
То к питону это никакого отношения не имеет. Я и говорю, может есть что то такое в математике, но я не в курсе, что такое 33333333(4) .
0
 Аватар для vpArth
48 / 43 / 10
Регистрация: 20.10.2020
Сообщений: 99
25.10.2020, 17:24
Цитата Сообщение от Viktorrus Посмотреть сообщение
По моему не правильно число содержащее 4 разряда называть байтом.
А кто его так называл, в моём байте 8 бит, что выражается четырьмя четверичными цифрами.
Одна четверичная цифра - это 2 бита:

Code
1
2
3
4
00 = 0
01 = 1
10 = 2
11 = 3
Добавлено через 3 минуты
В общем, если претензии только в том, что в Python наряду с функциями oct, hex, bin нет таковой для основания 4, то эти претензии мне непонятны)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
25.10.2020, 17:31
vpArth, И приче здесь C++ ? Я работаю на питоне и в нем нет четырехразрядной формы записи.

Добавлено через 40 секунд
Цитата Сообщение от vpArth Посмотреть сообщение
В общем, если претензии только в том, что в Python наряду с функциями oct, hex, bin нет таковой для основания 4, то эти претензии мне непонятны)
Притензии в том, что на питоне мы не можем вывести результат в четверичной форме записи, как того просят в задаче. Именно об этой некорректности условия я и говорил выше.
0
 Аватар для vpArth
48 / 43 / 10
Регистрация: 20.10.2020
Сообщений: 99
25.10.2020, 17:34
То есть, если бы в Python не было бы литералов вида 0b00000001, задача перевода числа в двоичную систему счисления для вас была бы нерешаемой?

Добавлено через 2 минуты
Цитата Сообщение от Viktorrus Посмотреть сообщение
мы не можем вывести результат в четверичной форме записи
Во все времена, во всех ЯП, результатом перевода числа из одной СС в другую была строка(цепочка символов цифр). В Python нет строк?
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
25.10.2020, 17:53
vpArth, В питоне байт можно записать как '-10010011' , что следует из
Python
1
2
>>> int('-10010011', 2)
-147
. Можно записать и эквивалентным положительным числом, но такакя запись будет разная для компьютеров разной разрядности. Точнее зависит не от разрядности процессора, а от разрядности операционной системы, (сколько байт передается процессору за один такт).

Добавлено через 2 минуты
Так как именно из-за физического игнорирования разряда переполнения при сложении мы можем заменять отрицательные числа эквивалентными им положительными числами при вычислениях в компьютере.
0
 Аватар для vpArth
48 / 43 / 10
Регистрация: 20.10.2020
Сообщений: 99
25.10.2020, 17:58
В питоне байт можно записать как '-2103', что следует из

Python
1
2
>>> int('-2103', 4)
-147
Добавлено через 1 минуту
Разве не очевидно, что -147 не влезает в байт никоим образом?

Добавлено через 1 минуту
Что-то консенсуса у нас с вами не возникает. Ввиду неплодотворности беседы прошу меня извинить и предлагаю свернуть дискуссию.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
25.10.2020, 18:25
Поэтому число -147, размещенное в двух байтах компьютера будет выглядеть так '-0000000010010011'
Python
1
2
>>> int('-0000000010010011', 2)
-147
Если же мы запишем этот байт, так как он действительно представлен в компьютере в виде нулей и единиц (положительным двоичным эквивалентом состоящим из двух байтов), то питон его функцией int преобразует не в десятичное -147, а в большое положительное число. Положительный эквивалент отрицательного числа мы можем увидеть только если выведем в формате строки байтов bytes или например строку типа bytearray . Но это уже дебри, я давно этим занимался, поэтому выхожу из дискуссии. На сегодня хватит.
Удачи.

Добавлено через 10 минут
Python
1
2
>>> int('-00002103', 4)
-147
Размещено в 2-х байтах, но специального формата для записи такого числа в питоне не существует.
0
3 / 3 / 0
Регистрация: 25.04.2020
Сообщений: 131
26.10.2020, 07:01  [ТС]
Всем спасибо!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2020, 07:01
Помогаю со студенческими работами здесь

Написать и протестировать функцию, переводящую число из десятичной системы в двоичную, четверичную и восьмеричную
1. Написать и протестировать функцию, переводящую число из десятичной системы в двоичную, четверичную и восьмеричную. (С четверичной...

Используя рекурсию написать программу перевода натурального числа из десятичной системы счисления в четверичную
Здравствуйте. Помогите пожалуйста. Задание звучит: Используя рекурсию написать программу перевода натурального числа из десятичной...

Перевод чисел из десятичной системы
Помогите с решением ПЗ

Перевод чисел из десятичной системы
Написать программу. Ввести с клавиатуры число (в десятичной системе исчисления) и систему исчисления в которую перевести это число (...

Перевод чисел из десятичной системы
Доброго времени суток, нужна помощь с переводом чисел из десятичной системы исчисления в 2, 8, 16, а также наоборот. Заранее спасибо


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru