Требуется реализовать функцию, которая производит инкремент аргумента без использования сложения и вычитания.
Что-то ничего в голову не приходит.
Может у кого-нибудь есть идеи?
Многоие знания сулят нам многие печали, и умножая знания мы умножаем печаль. (с) Екклезиаст.
Re: Помогите решить задачку про инкремент без + и -
Здравствуйте, Seneca, Вы писали:
S>Требуется реализовать функцию, которая производит инкремент аргумента без использования сложения и вычитания. S>Что-то ничего в голову не приходит. S>Может у кого-нибудь есть идеи?
inline int increment(int n)
{
return -(~n);
}
Re: Помогите решить задачку про инкремент без + и -
Здравствуйте, Seneca, Вы писали:
S>Требуется реализовать функцию, которая производит инкремент аргумента без использования сложения и вычитания. S>Что-то ничего в голову не приходит. S>Может у кого-нибудь есть идеи?
Очень просто:
Идешь в цикле по битам начиная с самого младшего до первого нуля —
нуль меняешь на единицу, а все единице до него на нули.
Re[2]: Помогите решить задачку про инкремент без + и -
Здравствуйте, 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]: Помогите решить задачку про инкремент без + и -
Здравствуйте, korzhik, Вы писали:
S>>Требуется реализовать функцию, которая производит инкремент аргумента без использования сложения и вычитания. S>>Что-то ничего в голову не приходит. S>>Может у кого-нибудь есть идеи?
K>
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, korzhik, Вы писали:
K>>
K>>inline int increment(int n)
K>>{
K>> return -(~n);
K>>}
K>>
MS>Работает только если отрицательные числа представлены дополнительным кодом.
Естественно.
>Кто-нибудь видел другие? Обратный код, модуль-знак?
Я не видел. Но я вообщето кроме IA32 ничего и не видел.