Помогите решить задачку про инкремент без + и -
От: Seneca Россия  
Дата: 14.11.04 14:00
Оценка:
Требуется реализовать функцию, которая производит инкремент аргумента без использования сложения и вычитания.
Что-то ничего в голову не приходит.
Может у кого-нибудь есть идеи?
Многоие знания сулят нам многие печали, и умножая знания мы умножаем печаль. (с) Екклезиаст.
Re: Помогите решить задачку про инкремент без + и -
От: adontz Грузия http://adontz.wordpress.com/
Дата: 14.11.04 14:13
Оценка:
Здравствуйте, Seneca, Вы писали:

char increment(char value)
{
static char _inc[256] = {1, 2, 3, 4, ...253, 254, 0};

return _inc[value];
}


Ну и расширить на нужное количество байт циклом.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Помогите решить задачку про инкремент без + и -
От: korzhik Россия  
Дата: 14.11.04 14:16
Оценка: 40 (1)
Здравствуйте, Seneca, Вы писали:

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

S>Что-то ничего в голову не приходит.
S>Может у кого-нибудь есть идеи?

inline int increment(int n)
{
    return -(~n);
}
Re: Помогите решить задачку про инкремент без + и -
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 15.11.04 09:14
Оценка:
Здравствуйте, Seneca, Вы писали:

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

S>Что-то ничего в голову не приходит.
S>Может у кого-нибудь есть идеи?

Очень просто:
Идешь в цикле по битам начиная с самого младшего до первого нуля —
нуль меняешь на единицу, а все единице до него на нули.
Re[2]: Помогите решить задачку про инкремент без + и -
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 15.11.04 09:21
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

ATP>Здравствуйте, Seneca, Вы писали:


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

S>>Что-то ничего в голову не приходит.
S>>Может у кого-нибудь есть идеи?

ATP>Очень просто:

ATP>Идешь в цикле по битам начиная с самого младшего до первого нуля -
ATP>нуль меняешь на единицу, а все единице до него на нули.

Чтото типа того:

unsigned int value = ....; // Переменная для инкремента
unsigned int mask = 1;

while (mask)
{
if (value & mask)
    value &= ~mask;
else
{
    value |= mask;
    break;
}

mask <<= 1;
}


В итоге в value должнен быть результат value + 1. Единственное, что в данном случае получилась операция с насыщением, но это уже сам смотри, как тебе нужно....
Re[2]: Помогите решить задачку про инкремент без + и -
От: Sir Wiz Россия  
Дата: 15.11.04 10:06
Оценка:
Здравствуйте, korzhik, Вы писали:

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

S>>Что-то ничего в голову не приходит.
S>>Может у кого-нибудь есть идеи?

K>
K>inline int increment(int & n)
K>{
K>    return n = -(~n);
K>}
K>


В соответствии с т.з.
... << RSDN@Home 1.1.4 @@subversion >>
Re[2]: Помогите решить задачку про инкремент без + и -
От: McSeem2 США http://www.antigrain.com
Дата: 17.11.04 15:11
Оценка: 1 (1)
Здравствуйте, korzhik, Вы писали:

K>
K>inline int increment(int n)
K>{
K>    return -(~n);
K>}
K>


Работает только если отрицательные числа представлены дополнительным кодом. Кто-нибудь видел другие? Обратный код, модуль-знак?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[3]: Помогите решить задачку про инкремент без + и -
От: korzhik Россия  
Дата: 17.11.04 15:13
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Здравствуйте, korzhik, Вы писали:


K>>
K>>inline int increment(int n)
K>>{
K>>    return -(~n);
K>>}
K>>


MS>Работает только если отрицательные числа представлены дополнительным кодом.

Естественно.

>Кто-нибудь видел другие? Обратный код, модуль-знак?

Я не видел. Но я вообщето кроме IA32 ничего и не видел.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.