栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++ 7个

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++ 7个

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

注:所有带 ll 的名字,均为 long long 类型下运算,否则将当作 int 来算。

1   __builtin_ctz( )  /  __buitlin_ctzll( )

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

举个例子:

#include 
using namespace std;

int main() 
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout<<__builtin_ctz(64)< 

输出:6

64=,末尾共有6个0。

2 __buitlin_clz( )  /  __buitlin_clzll( )

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

举个例子:

#include 
using namespace std;

int main() 
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout<<__builtin_clz(63)< 

输出:26

63=(加空格是为了方便大家看的清楚)开头共有26个0。

让我们把 int 换成 long long 试试:

#include 
using namespace std;

int main() 
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout<<__builtin_clzll(63)< 

输出:58   开头共有58个0 (long long是64位!) 。

3 __builtin_popcount( )

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

举个例子:

#include 
using namespace std;

int main() 
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout<<__builtin_popcount(4095)< 

输出:12

4095=,共有12个1。

4 __builtin_parity( )

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

举个例子:

#include 
using namespace std;

int main() 
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout<<__builtin_parity(1)< 

输出:1

1里面有1个1,所以当然输出1咯。

5 __builtin_ffs( )

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

举个例子:

#include 
using namespace std;

int main() 
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout<<__builtin_ffs(84)< 

输出:3

84=,所以是3。

6 __builtin_sqrt( )

用法:快速开平方。

7 __builtin_sqrtf( )

用法:快速开平方。

那么他们跟 sqrt() 有什么区别呢?

做个简单测试:1到,看看耗时:

sqrt:  约 3700 ms

__builtin_sqrt( ): 约 330 ms

__bulitin_sqrtf( ): 约 360ms

快了接近10倍!

那么这两个函数的区别是什么呢?

__builtin_sqrt( ) :8位

__builtin_sqrtf( ) :4位

以上有参考:https://blog.csdn.net/weixin_43731933/article/details/107344482

 ~~~如果还知道其他类似函数,欢迎各位评论,本人会补充~~~
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917350.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号