Полезные __builtin функции
Иногда требуется выполнить какую-то неочевидную битовую операцию, например, проверить число на степень двойки. Кстати, на leadcode / codeforces часто попадаются такие задачки, которые надо решить еще и эффективно. На помощь приходят __builtin функции 😉
__builtin_popcount / __builtin_popcountll:
подсчитывает количество установленных битов в целом числе (32 bit / 64 bit).
__builtin_parity / __builtin_parityll:
проверяет четность числа (32 bit / 64 bit).
__builtin_clz / __builtin_clzll:
подсчитывает количество нулей "слева" у целого числа (little endian, 32 bit / 64 bit).
__builtin_ctz / __builtin_ctzll:
подсчитывает количество нулей "справа" у целого числа (little endian, 32 bit / 64 bit).
__builtin_ffs / __builtin_ffsll:
возвращает индекс + 1 младшего 1-го бита x, или, если x равен нулю, возвращает ноль (32 bit / 64 bit).
__builtin_offsetof:
считает отступ полей от начала в POD (С подобных) структурах.
Живой пример: https://compiler-explorer.com/z/6s5nEE8sb
Конечно, есть еще и другие! Пишите в комментариях👇, какие еще вам пригодились на практике?
#compiler #NONSTANDARD
Иногда требуется выполнить какую-то неочевидную битовую операцию, например, проверить число на степень двойки. Кстати, на leadcode / codeforces часто попадаются такие задачки, которые надо решить еще и эффективно. На помощь приходят __builtin функции 😉
__builtin_popcount / __builtin_popcountll:
подсчитывает количество установленных битов в целом числе (32 bit / 64 bit).
__builtin_parity / __builtin_parityll:
проверяет четность числа (32 bit / 64 bit).
__builtin_clz / __builtin_clzll:
подсчитывает количество нулей "слева" у целого числа (little endian, 32 bit / 64 bit).
__builtin_ctz / __builtin_ctzll:
подсчитывает количество нулей "справа" у целого числа (little endian, 32 bit / 64 bit).
__builtin_ffs / __builtin_ffsll:
возвращает индекс + 1 младшего 1-го бита x, или, если x равен нулю, возвращает ноль (32 bit / 64 bit).
__builtin_offsetof:
считает отступ полей от начала в POD (С подобных) структурах.
Живой пример: https://compiler-explorer.com/z/6s5nEE8sb
Конечно, есть еще и другие! Пишите в комментариях👇, какие еще вам пригодились на практике?
#compiler #NONSTANDARD