首页 > 编程语言 >C/C++ __builtin 超实用位运算函数总结

C/C++ __builtin 超实用位运算函数总结

时间:2023-11-07 20:33:05浏览次数:98  
标签:__ cout int C++ builtin using include

以 __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位

标签:__,cout,int,C++,builtin,using,include
From: https://www.cnblogs.com/wenyutao1/p/17815874.html

相关文章

  • python
    列表1.列表定义的语法:[元素1,元素二,元素三,...]#元素可以重复2.列表中的元素可以是任意类型,也可以是列表,从而形成列表嵌套。3.列表具有索引,从左往右数从o索引开始,从右往左数从-1索引开始。4.对于嵌套的列表:list=[[1,2,3,],1,2,3,4,5]#如果去取第一个列表中的第二个元素需要声明:list[......
  • 无涯教程-批处理 - TASKKILL函数
    此批处理命令结束一个或多个任务。TASKKILL-语法Taskkill/im[taskname]TASKKILL-示例@echooffTaskkill/immspaint.exe上面的命令会将终止消息发送到MSPaint的任何打开的程序。参考链接https://www.learnfk.com/batch-script/batch-script-taskkill.html......
  • 能说一下JVM的内存区域吗?
    JVM内存区域最粗略的划分可以分为堆和栈,当然,按照虚拟机规范,可以划分为以下几个区域:JVM内存分为线程私有区和线程共享区,其中方法区和堆是线程共享区,虚拟机栈、本地方法栈和程序计数器是线程隔离的数据区。1、程序计数器程序计数器(ProgramCounterRegister)也被称为PC寄存器,是一块......
  • 论文阅读:Point-BERT: Pre-training 3D Point Cloud Transformers with Masked Point M
    Point-BERT:Pre-training3DPointCloudTransformerswith MaskedPointModelingPoint-BERT:基于掩码建模的点云自注意力模型预训练摘要我们提出了Point-BERT,一个学习自注意力的新范式,将BERT[8]的概念推广到三维点云。受BERT的启发,我们设计了一个掩蔽点建模(MPM)任务来预训练点云......
  • 论文阅读:Local and Global Structure for Urban ALS Point Cloud Semantic Segmentati
    LocalandGlobalStructureforUrbanALSPoint CloudSemanticSegmentationWith Ground-AwareAttention利用地面感知注意力对城市ALS点云进行局部和全局结构的语义分割摘要机载激光扫描(ALS)点云的解释在地理信息生产中起着显著的作用。作为解释的关键步骤,准确的语义分割可以......
  • mysql字符设置
    showvariableslike'character_set_%';要进入mysql数据库,然后对字符集重新进行配置,注意,每次使用安装mysql数据库的时候都要设置SETcharacter_set_system=gbk;SETcharacter_set_server=gbk;SETcharacter_set_client=gbk;SETcharacter_set_connection=gbk;SETcharacter_set......
  • 前端常用设计模式
    什么是设计模式?​设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,设计模式并不是一种固定的公式,而是一种思想,是一种解决问题的思路;使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可维护性。设计模式不区分编......
  • [NOIP2022] 喵了个喵
    补一下往年的构造题。。。\(k\)大概是\(n\)的两倍往下,这启示我们每个栈最多只放两个元素。首先考虑\(k=2n-2\)的分,容易得到一个策略:留一个空栈不放,每个栈最多放两个。如果当前卡牌存在一个栈顶/栈底和它一样,那当前牌总是可以消掉的。否则当前栈中的卡牌一定两两不同,那一定......
  • 统计范围内的元音字符串数
    题目概述:给你一个下标从0开始的字符串数组words和两个整数:left和right。如果字符串以元音字母开头并以元音字母结尾,那么该字符串就是一个元音字符串,其中元音字母是'a'、'e'、'i'、'o'、'u'。返回words[i]是元音字符串的数目,其中i在闭区间[left,right]内。解......
  • 代码随想训练营第二十八天(Python)| 93.复原IP地址 、 78.子集、 90.子集II
    93.复原IP地址1、方法一classSolution:defrestoreIpAddresses(self,s:str)->List[str]:res=[]self.tracebacking(s,0,[],res)returnresdeftracebacking(self,s,start,path,res):ifstart==len(s)andlen(pa......