![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Если мы можем написать -42, то почему бы не написать -2A ? И первый бит указывает на знак не у шестнадцатиричных чисел, а у чисел в дополнительном коде - это абсолютно независимые понятия. С тем же успехом мы можем считать десятичные числа представленными в дополнительном коде, т.е. например (для 8ми битных чисел) 200 будет соотвествовать -56. Требовать от внешнего представления класса, что бы hex числа для ввода/вывода были представленны в дополнительном коде (равно как и влюбом другом), это все равно, что требовать, что бы вместо числа -56 вводили 200. |
|||
|
||||
| powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
Тебе просто советовали вводить дополнительную переменую для знака. Иначе нужно при любой операции "извлекать" знак из числа. Добавлено через 1 минуту и 59 секунд xvr, цель 16-й чисел - облегчить работу с двоиным кодом. Кто работает с ними сразу может скачать, что в старшем бите. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Цель 16х чисел (В ДАННОМ СЛУЧАЕ) облегчить реализацию класса - многобайтовое преобразование hex<->bin делается легче, чем dec<->bin, но что то мне кажется, что об облегчения реализации, которая требовала бы ЯВНОГО кодирования отрицательных чисел в дополнительном виде речь все таки не шла Ы? |
|||
|
||||
| powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
Не вижу принципиальной разницы. В С++ есть средства, которые позволяю быстро преобразовать dec в hex. Это всего несколько дополнительных строк. И в условии явно сказано, что числа хранятся в прямом коде, а в прямом знак указывается в знаковом разряде. Согласен. Но "ЗАДАНИЕ" есть задание. Можно просто реализовать дополнительный конструктор для чисел, записанных в форме -N. |
|||
|
||||
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Препод сначала сказал что нужно знак задавать явно, + - . потом я спросил у меня же написано в дополнительном коде все нужно складывать, что это значит.Ну он говорит ладно тогда переводите в прямой код, знак задается в hex числе..
вообщем как я и предпологал -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
И для многобайтовых (>8) чисел тоже есть? И давно?
Собственно ЗАДАНИЕ этого не требовало Да собственно сам автор уже уточнил:
|
||||||
|
|||||||
| Ripper |
|
||||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Теперь вопросы касательно самого языка.
1)Как я всеже понял я должен перевести hex число в двоичное и записать его в массив.
Вот так коряво я это делаю, используя ф-ию:
Единственный вопрос почему последний элемент numer[x] а не number[x+1] = '\0'? что то я скока не считал получается вроде x+1. И может есть более прямой способ это сделать? Теперь вопрос, а как перевести из массива чаров типа "101010101" в hex число (которое потом нужно будет вывести на экран). Т.е. мне нужно будет перегруживать куча операторов. Один из первых это "<<". Вот я что-то додуматься не могу, как бы это нормаьно сделать. Наверно не хватает знаний самого си. Я надеюсь я верно понимаю что в ф-ии приведенной выше return "1111" означает указатель на массив чаров 1111? на начала массива? По аналогии что-то не доходит как сделать. -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
||||
|
|||||
| xvr |
|
||||||||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Не надо так делать. Это САМЫЙ неудобный вид хранения числа.
Это сообщение отредактировал(а) xvr - 7.11.2007, 23:23 |
||||||||||||||||
|
|||||||||||||||||
| powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
sizeof(long int) Я думаю, что этого вполне достаточно в большинстве случаев (32, а уж про 64 так вообще молчу). |
|||
|
||||
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Не, мой мозг не в состоянии этого понять.
Попробую сделать хоть что-то, храня hex числа в массиве... :( -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
sizeof(long int) это 4 (максимум 8), хотелось бы больше
Сдается мне, что там, где достаточно 32 или 64 бита, классы, такие как фигурировал в задании, не применяют - там и так все просто и прозрачно, со встроенными POD типами. Добавлено через 1 минуту и 27 секунд
Для начала напиши арифметику с таким представлением, если получится, то и hex ввод/вывод получится тоже. |
||||||
|
|||||||
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
xvr, мне не хватает знаний по си. мы много чего в инсте не проходили и как бы отсюда следует что это использовать нельзя
И я уже так запарился с этим заданием ужас) 1)template<int Length> что это? 2)что такое <<= ? в побитовых операциях ненашел такого 3)что значит прибавить к *this число? Переместить указатель на объект? что получится? 4)в задании сказано использовать массив char-ов а не int-ов 5)+ ко всему я не понял этот код т.к. незнаю вообще встроенных в си ф-ий, конечно могу посмотреть где нибудь описание, но я к другому клоню - что щас мне это совсем тяжко. Препод сказал сначала можно в hex виде хранить т.е. в массиве чаров 16ричные числа, потом сказал по другому.. Вообщем посмотрим, сделать нужно хоть как-то. Когда 16ричные числа в массиве вроде легче -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
| powerfox |
|
||||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
Если вы многого не проходили, то это не значит, что это нельзя использовать. Максимальное ограничение - конкретная реализация язык (компилятор). И то, что здесь идёт - не Си, а С++. Мусье учится на первом курсе? Шаблон, судя по записи. Я с ними плохо знаком, но Length как-то странно здесь смотрится. Обычно указывается просто тип (int в данному случае). <<= - это оператор. Сдвиг влево и присваивание. Принцип такой же, как и +=, который намного чаще используется.
this - укзатель на объект, для которого вызван метод. А *this - сам объект. Обычное разыменовывание. Посмотри базовые сведения о типах в С/С++. |
||||
|
|||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Это шаблон, параметризованный константой (не типом). Константа задает длинну представимых чисел (в единицах по 32 бита)
|
||||||||
|
|||||||||
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Эээх...
1)Можно без шаблонов? Ну не хочется щас читать ещё одну главу в шилде про шаблоны. наверно можно без них 2)И что значит прибавить к экземляру класса число? Этот оператор не реализован, а что он в итоге должен делать? 3)Я вообще не понимаю что этот код делает. *this += strtoul(s,0,16); memset(body,0,sizeof(body)); Что это за ф-ии? 4)<<= всмысле сдвиг влево и присваивание.. например *this<<=4? "<<" знаю вроде, например 1010 после сдвига 0100 (влево). а какой смысле будет у *this<<=4? Я пробую так все это делать:
Только незнаю насчет 3 конструктора и ввода >> пока ещё. -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |