Оглавление
У GCC/Clang есть несколько полезных и хорошо оптимизированных функций.
Битовая математика #
__builtin_popcount #
int __builtin_popcount(unsigned int v)int __builtin_popcountl(unsigned long v)int __builtin_popcountll(unsigned long long v)
Возвращает количество установленных (
1) бит в числе, например __builtin_popcount(0b110110) == 4__builtin_parity #
int __builtin_parity(unsigned int v)int __builtin_parityl(unsigned long v)int __builtin_parityll(unsigned long long v)
Проверяет чётность числа - возвращает
1 для чётного и 0 для нечётного__builtin_clz #
int __builtin_clz(unsigned int v)int __builtin_clzl(unsigned long v)int __builtin_clzll(unsigned long long v)
Count leading zeroes - возвращает количество незначащих нулей слева (до первого
1 бита), например __builtin_clz(0b0000100101) == 10 на 8 бит процессоре, при 32-бит int результат будет 26. Нулевой аргумент - неопределённое поведение!__builtin_ctz #
int __builtin_ctz(unsigned int v)int __builtin_ctzl(unsigned long v)int __builtin_ctzll(unsigned long long v)
Count trailing zeroes - возвращает количество значащих нулей справа (до первого
1 бита), например __builtin_ctz(0b10101000) == 3Математика #
Аналоги #
double __builtin_sqrt(double)float __builtin_sqrtf(float)double __builtin_sin(double)float __builtin_sinf(float)double __builtin_cos(double)float __builtin_cosf(float)double __builtin_tan(double)float __builtin_tanf(float)double __builtin_pow(double, double)float __builtin_powf(float, float)double __builtin_fabs(double)int __builtin_abs(int)long __builtin_labs(long)long long __builtin_llabs(long long)
Аналоги стандартных математических функций
Память #
__builtin_bzero #
void __builtin_bzero(void *p, unsigned long long n)
Заполнить память нулями на
n байтАналоги #
void *__builtin_memcpy(void *, const void *, unsigned long long)void *__builtin_memmove(void *, const void *, unsigned long long)void *__builtin_memset(void *, int, unsigned long long)int __builtin_memcmp(const void *, const void *, unsigned long long)
Аналоги стандартных функций для памяти
Строки #
Аналоги #
unsigned long long __builtin_strlen(const char *)char *__builtin_strcpy(char *, const char *)char *__builtin_strncpy(char *, const char *, unsigned long long)int __builtin_strcmp(const char *, const char *)int __builtin_strncmp(const char *, const char *, unsigned long long)char *__builtin_strchr(const char *, int)char *__builtin_strrchr(const char *, int)
Аналоги стандартных функций для строк
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])
- Поддержать автора за работу над уроками