Comments 23
Понимаете, любая функция должна быть хорошей. Нет, наверное, в качестве задачи для разминки мозгов «сделай XXXXX так, чтобы поместилось в одну строку» это подойдет. Вы рассматриваете их именно с этой точки зрения, правда?
>> Ранее я уже публиковал статью о Однострочниках на С++.
И, насколько я помню, с треском провалились?
И, насколько я помню, с треском провалились?
Почему команду «xchg op1, op2» в ассемблерной вставке не используете?
Потому что один из операндов должен быть регистром.
Полагаю, потому что xchg не имеет формы для обмена двух переменных в памяти.
Да можно и так…
void swap(int *a, int *b) {
asm volatile(
"XCHG %0, %1; \n\t"
:"=a"(*a),"=b"(*b)
:"a"(*a),"b"(*b)
);
}
И не забывайте, что если в аргументах XCHG есть память, то инструкция будет иметь префикс LOCK, что не значительно влияет на скорость исполнения.
Спасибо, Кэп)
Мне кажется, или данная реализация кода Грея для чисел вида 11...11 вернет 10...00?
11...11 ^ (01...11) = 10...00
11...11 ^ (01...11) = 10...00
«индийский алгоритм»
return b? ((b&1?a:1)*powM(a*a, b/2, p) % p): 1;
Человек, который найдет это в какой-нить опенсурсной библиотеке, в которой нужно будет разобраться, прокленет ее автора.
Макконнелла не читали?
return b? ((b&1?a:1)*powM(a*a, b/2, p) % p): 1;
Человек, который найдет это в какой-нить опенсурсной библиотеке, в которой нужно будет разобраться, прокленет ее автора.
Макконнелла не читали?
Почему? Алгоритм довольно простой и известный: если степень нечётная, умножь на основание предыдущую степень, а если чётная, возведи в квадрат вдвое меньшую степень. В одной строке разобраться не слишком сложно.
Это же не реальный рабочий код — это «разминка для мозгов». Естественно, никто не станет так делать. Я надеюсь, во всяком случае.
При всём уважении к труду… я не совсем понимаю, зачем нужны «однострочники» на C++.
Одно дело какой-нибудь powershell, где нужно в командной строке набрать строчку и получить результат.
И совсем другое дело — компилируемый язык, где разницы между одной строчкой и десятью строчками нет.
У меня все программы состоят из однострочников примерно такого вида:
class X {
public: void f();
void g(int x);
int h(double a, double b);
};
А что находится в cpp-модуле — какая кому разница?
Одно дело какой-нибудь powershell, где нужно в командной строке набрать строчку и получить результат.
И совсем другое дело — компилируемый язык, где разницы между одной строчкой и десятью строчками нет.
У меня все программы состоят из однострочников примерно такого вида:
class X {
public: void f();
void g(int x);
int h(double a, double b);
};
А что находится в cpp-модуле — какая кому разница?
> Сравнение 5 вариантов кода с undefined bahavior.
Fixed.
Fixed.
Sign up to leave a comment.
Однострочники на Си/С++. Часть 2