以 __builtin 开头的函数,是一种相当神奇的位运算函数,下面本人盘点了一下这些以 __builtin 开头的函数,希望可以帮到大家。

1 __builtin_ctz( ) / __buitlin_ctzll( )

用法:返回括号内数的二进制表示数末尾0的个数

//eg:
#include<bits/stdc++.h>
using namespace std ; int main(){
cout << __builtin_ctz(8) << endl ;
return 0 ;
}

输出:3
8 = 1000 , 末尾有3个0

2 __buitlin_clz( ) / __buitlin_clzll( )

用法:返回括号内数的二进制表示数前导0的个数

//eg:
#include<bits/stdc++.h>
using namespace std ; int main(){
cout << __builtin_clz(8) << endl ;
return 0 ;
}

输出:28
8 = 0000 0000 0000 0000 0000 0000 0000 1000 , 整型(int)为32位,有28个前导0

换位long long后

#include<bits/stdc++.h>
using namespace std ; int main(){
cout << __builtin_clzll(8) << endl ;
return 0 ;
}

输出:60
长整型(long long)为64位,有60个前导0

3 __builtin_popcount( )

用法:返回括号内数的二进制表示数1的个数

//eg:
#include<bits/stdc++.h>
using namespace std ; int main(){
cout << __builtin_popcount(15) << endl ;
return 0 ;
}

输出:4
15 = 1111 , 1的个数位4

4 __builtin_parity( )

用法:判断括号中数的二进制表示数1的个数的奇偶性(偶数返回0 , 奇数返回1)

#include<bits/stdc++/h>
using namespace std ; int main(){
cout << __builtin_parity(15) << endl ;
return 0 ;
}

输出:0
15 = 1111, 1的个数为4(偶数个)

5 __builtin_ffs( )

用法:返回括号中数的二进制表示数的最后一个1在第几位(从后往前算)

//eg:
#include<bits/stdc++.h>
using namespace std ; int main(){
cout << __builtin_ffs(8) << Lendl ;
return 0 ;
}

输出:4
8 = 1000 , 最后一个1在第四位

6 __builtin_sqrt( )

7 __builtin_sqrtf( )

用法:快速开平方

//eg:
#include<bits/stdc++.h>
using namespace std ; int main(){
cout << __builtin_sqrt(16) << endl ;
cout << __builtin_sqrtf(16) << endl ;
cout << sqrt(16) << endl ;
return 0 ;
}

输出:4
sqrt(16) = 4
那么他们跟 sqrt() 有什么区别呢?
做个小测试: 从到从1到108 比较耗时:
sqrt: 约 3700 ms
__builtin_sqrt( ): 约 330 ms
__bulitin_sqrtf( ): 约 360ms
快了接近10倍!
那么这两个函数的区别是什么呢?
__builtin_sqrt( ) :8位
__builtin_sqrtf( ) :4位

C/C++ __builtin 超实用位运算函数总结的更多相关文章

  1. VC中实现GCC的2个比较常用的位运算函数

    在GCC中内嵌了两个位运算的函数,但在VC中并没有这两个函数(有相似函数). //返回前导的0的个数. int __builtin_clz (unsigned int x) //返回后面的0个个数,和 ...

  2. Matlab位运算笔记

    本文为转载其他地方的文章; MATLAB函数 1.matlab函数bitset 设置数的某一位二进制位为1. <Simulink与信号处理> 使用方法 C = bitset(A,bit) ...

  3. NumPy 位运算

    NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操作 b ...

  4. Numpy | 13 位运算

    NumPy "bitwise_" 开头的函数是位运算函数.本章都是按二进制来操作的. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操 ...

  5. 10、numpy——位运算

    NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操作 b ...

  6. Lesson11——NumPy 位运算

    NumPy 教程目录 Lesson11--NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitw ...

  7. C语言回顾-函数和位运算

    1.函数的概述 功能独立的代码块 C语言由若干函数组成 1)从定义分,库函数和用户定义函数两种 2)从返回值分,有返回值函数和无返回值函数 3)从参数分,无参函数和有参函数 2.形参和实参 1)形参定 ...

  8. 数据类型、位运算、sizeof()函数

    数据精度,依次升高.(负数必须使用有符号类型) 不同精度的数据间运算,所得结果为高精度类型. 数据类型详细信息如下图: 整型数据的数制:十进制(32).八进制(032,以0开头).十六进制(0x32, ...

  9. 位运算+引用+const+new/delete+内联函数、函数重载、函数缺省参数

    update 2014-05-17 一.位运算 应用: 1.判断某一位是否为1 2.只改变其中某一位,而保持其它位都不变 位运算操作: 1.& 按位与(双目): 将某变量中的某些位(与0位与) ...

  10. js中的位运算

    按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...

随机推荐

  1. quarkus实战之五:细说maven插件

    quarkus的maven插件非常重要,管理和构建工程时都离不开,本篇就来一起了解和掌握它 欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com ...

  2. TOML是什么格式

    TOML(Tom's Obvious, Minimal Language)是一种用于配置文件的轻量级.易读的数据序列化格式.它由Tom Preston-Werner创建,旨在成为一种简单直观的配置文件 ...

  3. Mapbox—geocoder搜索地点error eaching the server

    Mapbox-geocoder搜索地点error eaching the server --There was an errorr eaching the server 环境说明: vue3.3.4 ...

  4. 我用WebGL打造了一款动态壁纸

    我用WebGL打造了一款动态壁纸 简述 最近在给自己电脑换壁纸的时候发现了一张很有特点的图(就是下面这张),于是我突发奇想,要是能把这张图变成一张动态的壁纸.那该多好.于是我打算用threejs开发一 ...

  5. QPushButton按钮的使用

    1 import sys 2 from PyQt5.QtCore import * 3 from PyQt5.QtGui import * 4 from PyQt5.QtWidgets import ...

  6. LangChain:打造自己的LLM应用

    1.LangChain是什么 LangChain是一个框架,用于开发由LLM驱动的应用程序.可以简单认为是LLM领域的Spring,以及开源版的ChatGPT插件系统.核心的2个功能为: 1)可以将 ...

  7. vue结合cesium,配置,插件vue-cli-plugin-cesium

    https://www.npmjs.com/package/vue-cli-plugin-cesium

  8. 使用supervisor守护Prometheus进程

    使用supervisor守护Prometheus进程 目录 使用supervisor守护Prometheus进程 安装supervisor 安装Prometheus监控系统 配置supervisor ...

  9. maven系列:基本命令(创建类、构建打包类、IDEA中操作)

    目录 一.创建类命令 创建普通Maven项目 创建Web Maven项目 发布第三方Jar到本地库中 二.构建打包类命令 编译源代码 编译测试代码 编译测试代码 打包项目 清除打包的项目 清除历史打包 ...

  10. .Net AsyncLocal介绍

    AsyncLocal的基本概念 AsyncLocal是一个在异步环境中存储和传递状态的类型.它允许你在线程或任务之间共享数据,而不会受到异步上下文切换的影响. 每一个异步的AsyncLocal的数据都 ...