Теперь по сабжу:
Статью обнаружил как-раз в этой библиотеке. Прочитав, был очень впечатлен. Некоторые вещи, конечно, мне были известны, но я подчерпнул много нового(правда даалеко не все переварил). Так что рекомендую прочитать всем поклонникам C/C++.
Выдержка:
Вопрос: сколько времени потребуется рядовому программисту, чтобы понять, что происходит с переменными x и y?
x ^= y ^= x ^=y;
Давайте разобьем это выражение на три: "x ^= y; y ^= x; x ^= y;", для наглядности записав их так:
1) x = x XOR y;
2) y = y XOR x;
3) x = x XOR y;
А это уже чистая математика получается! Повторное наложение исключающего ИЛИ независимо от порядка аргументов, как известно, дает исходный результат, но в строках 1) и 2) аргументы меняются местами, следовательно, после выполнения шага 2) в переменной y окажется x, а сам x будет содержать "смесь" (x XOR y), из которой на шаге 3) "изымается" прежний x и остается чистый y. Короче, происходит обмен значений двух переменных без привлечения третьей.
Красиво? Красиво! Но, увы, по скорости и объему машинного кода сильно проигрывает стандартному "tmp = x; x = y; y = tmp;", поэтому пользоваться данным хаком не рекомендуется.Ссылка: С-шные трюки от мыщъх'а
No comments:
Post a Comment