Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Создать своё исчисление!


Автор: steven13 3.4.2005, 06:37
Нужно создать свой тип целого числа.
В котором розряд состоит не из 10 числ а из восьми.

Как этого можно добится:

0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,30,31...75,76,77,100,101,102,103...


Так что-бы потом можно было с ним делать операции наналогично int.

Автор: chipset 3.4.2005, 06:47
Создать свой класс, перегрузить операторы =,+,-,==,*,/ и прочие, проверяя на (0<i<8) при каждом вычислении, и запрограммировать восьмеричные операции.
Добавлено @ 06:47
Модератор:перенесено из C++:Системное программирование и Win32Api

Автор: Domestic Cat 3.4.2005, 06:50
Это кому нужно, партии и правительству?
А о восьмеричной системе счисления слыхал?
http://www.gamaun.su/hsx/c/0002.html

Автор: steven13 3.4.2005, 07:30
Цитата(Domestic @ 3.4.2005, 06:50)
Это кому нужно, партии и правительству?
А о восьмеричной системе счисления слыхал?
http://www.gamaun.su/hsx/c/0002.html

Спасибо за ссылку, лучше стал понимать что нужно. Теперь хоть могу обяснить нормально.

У меня дурдом с этими числами. smile

Есть файл, в которов пишется в 16-ритчной системе, но значения там в 8-ричной системе, (максимум 7А).


Цитата
76
77
78
79
7A
0  1
1  1
2  1
3  1
4  1


Нужно его открыть, перевести в десятеричную систему, пользователь (или програма) меняет пару цыфру, а потом нужно в обратном порядке записать обратно.

Если есть советы, внимательно выслушаю.

Автор: LuckLess 3.4.2005, 10:14
Цитата(steven13 @ 3.4.2005, 07:30)
16-ритчной системе, но значения там в 8-ричной системе

чтото тупняк напал.
в эту строчку пытался вЪехать минут 10.
Можно поподроднее тут плз?

Добавлено @ 10:15
Цитата(steven13 @ 3.4.2005, 07:30)
(максимум 7А).

как это 7A -> это значение в 8-ой системе , когда оно 16-ое.
ух.
щас рассплавлюсь..

Автор: steven13 3.4.2005, 16:56
Вот число в 10-ричной - 200
Вот это число в 8-ричной - 310
Вот это число в 16 -ричной - C8

А ВОТ ТАК ОНО ЗАПИСАНО: 4E 01

Обратно переводится: (4Е= 78) + (01=122 ) = 200

Автор: LuckLess 3.4.2005, 17:17
01=122 -- это как?

Автор: De Gray 3.4.2005, 17:19
0100- либо 64 либо 256, но уж никак не 122, в крайнем случае 121

Автор: steven13 3.4.2005, 17:43
Цитата(LuckLess @ 3.4.2005, 17:17)
01=122 -- это как?

Одна 16 ричная ячейка может принимать значения:

от 00 до 7A

если значение больше 122 (7A), на пример 123 то программа не пишет его как 7B, а начинает использовать уже вторую ячейку!!!

И пишет его 00 01.

Автор: steven13 3.4.2005, 18:00
Цитата(De @ 3.4.2005, 17:19)
0100- либо 64 либо 256, но уж никак не 122, в крайнем случае 121

Возможно так у нормальных людей!!!!

Но здесь програма пишет в одну ячейку не больше 7А (включительно) то-есть 122.



Моё предположение, что вводить данные нужно в десятеричной системе оказалось ошибочно. smile
Вводить их нужно в восьмеричной системе.
То-есть использовать 8 и 9 НЕЛЬЗЯ!!!
Это упрощает задачу.


Ципочка получаэтся такая:

1. Вовожу значение в восмеричной системе.

2. Программа их пишет в файл в "хитророй" Неполной 16-ричной системе.

1. Нужно считать это значение.
2. Декодировать в 8-ричную систему.

3. Работать с ним в 8-ричной системе.
4. Сохранить назад в том ненормальном формате. smile



Вернулись к тому с чего начинали, нужно заставить Си правильно заботать с цифрами в восьмеричной системе.

Автор: pablo 4.4.2005, 08:17
Если пишеш в файл или на екран, то для подобных целей можно использовать модификаторы потоков (hex, oct, dec).
Потоки С++ в этом отношении достаточно умные и поймыт что тут имеем дело с 16 ричными, 8 ричными и 10 сыфрами.
Просто при выводе надо указать что за числа вы выводите:

Код




cout << hex << 17 << endl; 11
cout << oct << 9 << endl; 11
cout << dec << 11 << endl; 11

[/code]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)