C/C++ __builtin 超实用位运算函数总结
以 __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 超实用位运算函数总结的更多相关文章
- VC中实现GCC的2个比较常用的位运算函数
在GCC中内嵌了两个位运算的函数,但在VC中并没有这两个函数(有相似函数). //返回前导的0的个数. int __builtin_clz (unsigned int x) //返回后面的0个个数,和 ...
- Matlab位运算笔记
本文为转载其他地方的文章; MATLAB函数 1.matlab函数bitset 设置数的某一位二进制位为1. <Simulink与信号处理> 使用方法 C = bitset(A,bit) ...
- NumPy 位运算
NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操作 b ...
- Numpy | 13 位运算
NumPy "bitwise_" 开头的函数是位运算函数.本章都是按二进制来操作的. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操 ...
- 10、numpy——位运算
NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操作 b ...
- Lesson11——NumPy 位运算
NumPy 教程目录 Lesson11--NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitw ...
- C语言回顾-函数和位运算
1.函数的概述 功能独立的代码块 C语言由若干函数组成 1)从定义分,库函数和用户定义函数两种 2)从返回值分,有返回值函数和无返回值函数 3)从参数分,无参函数和有参函数 2.形参和实参 1)形参定 ...
- 数据类型、位运算、sizeof()函数
数据精度,依次升高.(负数必须使用有符号类型) 不同精度的数据间运算,所得结果为高精度类型. 数据类型详细信息如下图: 整型数据的数制:十进制(32).八进制(032,以0开头).十六进制(0x32, ...
- 位运算+引用+const+new/delete+内联函数、函数重载、函数缺省参数
update 2014-05-17 一.位运算 应用: 1.判断某一位是否为1 2.只改变其中某一位,而保持其它位都不变 位运算操作: 1.& 按位与(双目): 将某变量中的某些位(与0位与) ...
- js中的位运算
按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...
随机推荐
- iptables简要介绍及使用iptables实践NAT技术
简介 iptables的文章多如牛毛,但是,我读了一些,发现虽然成体系,但是不便理解,今天就结合自己的理解,好好讲解下,另外,我们也会使用iptables来实验一个nat地址转换的demo,nat转换 ...
- 文心一言 VS 讯飞星火 VS chatgpt (66)-- 算法导论6.5 5题
五.试分析在使用下列循环不变量时,HEAP-INCREASE-KEY 的正确性:在算法的第4~6行 while循环每次迭代开始的时候,子数组 A[1..A.heap-size]要满足最大堆的性质.如果 ...
- 什么是PMP?
PMP(Project Management Professional)中文名称叫项目管理专业人士资格认证.它是由美国项目管理协会(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证 ...
- 关于reids免安装的使用与注意事项
redis是我们现在常用的缓存数据库.可是redis官方网站只提供linux版本,而我们又习惯在windows系统上使用开发工具,这又怎么办呢? 幸好微软官方也提供了windows版本,方便根据实际需 ...
- Mysql 统计标签出现次数(一行变多行)
需求背景 需求 一张数据表 其中有sid字段,代表tag,每行数据可能有多个tag字段 统计全量数据中所有tag出现的次数(按tag分组,分别有多少数据) source table demo id s ...
- FreeRTOS 基于 ARMv8-M 对 MPU 的应用
一.前言 ARMv8-M 支持 MPU,FreeRTOS 也添加了对这些 MPU 的应用代码.这里用来记录 FreeRTOS 对 MPU 应用方式的探究结果. 二.ArmV8-M MPU 介绍 ARM ...
- LeetCode 周赛上分之旅 # 37 多源 BFS 与连通性问题
️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...
- 【python】调用钉钉机器人发起通知
有时候需要做个某些服务的状态监控,用钉钉机器人发通知挺方便的.可以用shell脚本配合crontab检测状态,检测到异常就调用python脚本发起告警. python内容 此处用的python3,需要 ...
- 使用wrk对api接口进行性能测试
安装 yum install -y openssl git git clone https://github.com/wg/wrk.git wrk cd wrk make cp wrk /usr/lo ...
- 2、搭建MyBatis
2.1.开发环境 IDE:idea 2019.2 构建工具:maven 3.8.4 MySQL版本:MySQL 5.7 MyBatis版本:MyBatis 3.5.7 MySQL不同版本的注意事项 ( ...