Предположим, что есть машина с неизвестной кодировкой отрицательных чисел.
Необходимо найти кодировку числа в дополнительной кодировке, т.е. надо реализовать ф-ю(С)
unsigned int get2compliment(int i);
Кто быстрей?
Здравствуйте, nikholas, Вы писали:
N>Предположим, что есть машина с неизвестной кодировкой отрицательных чисел.
Да нет уж, давай с известной. В неизвестной можно чего угодно намутить (задом наперед числа хранить, ксорить с числом 666 и т.д.)
N>Необходимо найти кодировку числа в дополнительной кодировке, т.е. надо реализовать ф-ю(С) N>unsigned int get2compliment(int i); N>Кто быстрей?
А как же по поводу переносимости кода? В стандарте "С" про кодтровку ничего не сказано...
ЗЫ Кодировку положительных чисел можно считать известной, никто реальных альтернативных вариантов пока не придумал
Здравствуйте, nikholas, Вы писали:
N>А как же по поводу переносимости кода? В стандарте "С" про кодтровку ничего не сказано...
Да причем тут стандарты "C", если тебе надо выполнить низкоуровневую операцию (получить дополнительный код числа). Вот если бы просто получить противоположное число, то пожалуйста:
int y = -x;
N>ЗЫ Кодировку положительных чисел можно считать известной, никто реальных альтернативных вариантов пока не придумал
Два альтернативных варианта я уже предложил, могу еще.
З.Ы. По поводу темы сообщения: дополнение до 2 — я так понимаю, что это (2-x)%N или произвольные вариации этого же. Или нет?
Здравствуйте, nikholas, Вы писали:
N>Здравствуйте, RS, Вы писали:
N> RS>>Тот, кто знает кодировку.
N>А как же по поводу переносимости кода? В стандарте "С" про кодтровку ничего не сказано... N>ЗЫ Кодировку положительных чисел можно считать известной, никто реальных альтернативных вариантов пока не придумал
Имхо, навалом.
Младший байт спереду или сзаду.
Хранение в BCD-формате (на каких-нибудь древних машинах).
Хранение в остаточных классах.
Хранение в унарной системе счисления.
Здравствуйте, RS, Вы писали:
RS>Да причем тут стандарты "C", если тебе надо выполнить низкоуровневую операцию (получить дополнительный код числа).
В некоторых протоколах требуется, чтобы числа были в доп. формате, а их представление на целевой машине неизвестно. Отсюда вытекает потребность в подобном преобразовании на языке более высокого уровня.
RS>З.Ы. По поводу темы сообщения: дополнение до 2 — я так понимаю, что это (2-x)%N или произвольные вариации этого же. Или нет?
Дополнение до 2 — это второе название доп. кода ( есть еще дополнение до 1, например, по другому — обратный код)
Здравствуйте, nikholas, Вы писали:
N>В некоторых протоколах требуется, чтобы числа были в доп. формате, а их представление на целевой машине неизвестно. Отсюда вытекает потребность в подобном преобразовании на языке более высокого уровня.
Это значит, что операции над числами в доп. коде тебе придется:
1) реализовывать аппаратно, надеясь, что целевая машина все-таки работает в доп. коде.
2) реализовывать самому — побитовое сложение, умножение...
3) сделать несколько вариантов исходников (пользуясь #define) для различных аппаратных платформ.
Настоятельно рекомендую третий вариант.
N>Дополнение до 2 — это второе название доп. кода ( есть еще дополнение до 1, например, по другому — обратный код)
Спорить не стану, не помню я. Но дополнительный код, обратный код как-то проще звучат.
Здравствуйте, RS, Вы писали:
RS>Здравствуйте, nikholas, Вы писали:
N>>В некоторых протоколах требуется, чтобы числа были в доп. формате, а их представление на целевой машине неизвестно. Отсюда вытекает потребность в подобном преобразовании на языке более высокого уровня.
RS>Это значит, что операции над числами в доп. коде тебе придется: RS>1) реализовывать аппаратно, надеясь, что целевая машина все-таки работает в доп. коде. RS>2) реализовывать самому — побитовое сложение, умножение... RS>3) сделать несколько вариантов исходников (пользуясь #define) для различных аппаратных платформ.
RS>Настоятельно рекомендую третий вариант.
Никаких операций над такими числами не требуется — надо его получить и полать куда-нибудь
ЗЫ Я послал это в "этюды" не по своей тупости а потому, что решение красиво и изящно, на мой взгляд
Здравствуйте, mrhru, Вы писали:
M>Имхо, навалом. M>Младший байт спереду или сзаду.
Можно еще поинтересоваться порядком битов в байте
На представление числа это не влияет — все равно все операции с числами работают правильно
M>Хранение в BCD-формате (на каких-нибудь древних машинах). M>Хранение в остаточных классах. M>Хранение в унарной системе счисления.
M>Наверняка ещё не всё.
Ну я же говорил про разумные варианты...
Где же вы видели реализацию инта в С такими "изысканными" способами?
M>>Хранение в BCD-формате (на каких-нибудь древних машинах).
На древних машинах...
M>>Хранение в остаточных классах.
На спецмашинах. Помница, в СССР, году в 70-м, сделали ЭВМ для радиолокаторов в остаточных классах.
Быстродействие порядка 1 млрд. оп/сек.
M>>Хранение в унарной системе счисления.
Бухгалтерские счёты. Правда не знаю, язык С для них реализован или нет.
M>>Наверняка ещё не всё.
N>Ну я же говорил про разумные варианты... N>Где же вы видели реализацию инта в С такими "изысканными" способами?
Гм, извиняюсь. Настроение весеннее , а упоминание про разумные варианты — не встретил.
Здравствуйте, nikholas, Вы писали:
N>Предположим, что есть машина с неизвестной кодировкой отрицательных чисел. N>Необходимо найти кодировку числа в дополнительной кодировке, т.е. надо реализовать ф-ю(С) N>unsigned int get2compliment(int i); N>Кто быстрей?