?

Log in

No account? Create an account

Что вычисляет этот код? - Узором созвездий по мантии ночи

03.07.2013, Среда

18:47:00 - Что вычисляет этот код?

Previous Entry Поделиться Next Entry

На работе в программистском чате промелькнуло:

x/=x&-x;

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

This entry was originally posted at http://arilou.dreamwidth.org/918880.html. Please comment there using OpenID.

Comments:

[User Picture]
From:beldmit
Date:03.07.2013 17:03:56
(Link)
Кажется, взятие по модулю. Если я прав, то интересно, кстати, как это работает на крайних значениях - INT_MAX != -INT_MIN, и возможны неожиданности.

Автора кода да, хочется обработать тупыми овечьими ножницами.
(Ответить) (Thread)
[User Picture]
From:cmike
Date:03.07.2013 17:33:54
(Link)
Очевидно же нет. :) И на крайних значениях работает нехорошо.

Edited at 2013-07-03 17:34 (UTC)
(Ответить) (Parent) (Thread)
[User Picture]
From:beldmit
Date:03.07.2013 19:14:03
(Link)
Тьфу. Ты прав. Но оценку автора не меняет.
(Ответить) (Parent) (Thread)
[User Picture]
From:cmike
Date:04.07.2013 10:39:07
(Link)
Ну, нужно делать дефайн с мнемоничным названием, конечно.
(Ответить) (Parent) (Thread)
[User Picture]
From:slobin
Date:03.07.2013 18:27:24
(Link)
Блин! Извини. Новая клавиатура постоянно "сама" нажимает какую-то не ту кнопку. Пробую ещё раз: ответ угадал методом "посмотреть на первые 15 значений". Впечатлился. Спойлерить не буду. Забавно, что на этой странице этого варианта полностью нет. Хотя кусок x&-x рассматривается как стандартная идиома (и элемент многих более сложных связок).

... Дед жил-был, дед жив-есть, дед будет жить-быть ...

(Ответить) (Thread)
[User Picture]
From:cmike
Date:04.07.2013 10:36:41
(Link)
Ну просто же: -x получается из x простым преобразованием битов. А за страничку спасибо, она красивая.

Edited at 2013-07-04 10:37 (UTC)
(Ответить) (Parent) (Thread)
[User Picture]
From:kondratenko
Date:03.07.2013 20:25:46
(Link)
Убирает все младшие нулевые разряды в двоичном представлении.
(Ответить) (Thread)