__builtin_popcount() 函数

详解

该函数的主要作用是计算一个数字的二进制中有多少个1,返回值就是其中1的个数。

它使用一张基于表的方法来进行位搜索,因此这个操作的执行效率很高

此处举一题

P1582 倒水

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
int main()
{
    int n,k;
    scanf("%d%d",&n,&k);
    int ans=n;
    while(__builtin_popcount(n)>k)
    {
        n+=lowbit(n);
    }
    printf("%d\n",n-ans);
    return 0;
}

  

原文地址:https://www.cnblogs.com/-xiangyang/p/9483374.html

时间: 2024-11-02 11:51:47

__builtin_popcount() 函数的相关文章

Codeforces Beta Round #72 (Div. 2 Only)

Codeforces Beta Round #72 (Div. 2 Only) http://codeforces.com/contest/84 A 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define lson l,mid,rt<<1 4 #define rson mid+1,r,rt<<1|1 5 #define sqr(x) ((x)*(x)) 6 #define pb push_back 7 #de

glibc中几个有用的处理二进制们的内置函数

说明:因为在牡丹江网络赛中看见北大AC非常简洁的代码里面把二进制用得是炉火纯青,在里面看见了处理二进制的函数,所以咱也学一下. (1) - Built-in Function: int __builtin_ffs (unsigned int x) Returns one plus the index of the least significant 1-bit of x, or if x is zero, returns zero. 返回右起第一个'1'的位置. (2) - Built-in F

__builtin_popcount(n)

Gcc提供的内建函数__builtin_popcount(n),可以精确计算n表示成二进制时有多少个1.借助这个函数可以快速判断一个数是否是2的幂. 1 bool isPowerOfTwo(int n) 2 { 3 return n>0 && __builtin_popcount(n)==1; 4 }

四种GCC内置位运算函数

int __builtin_ffs (unsigned int x) 返回x的最后一位1的是从后向前第几位,比方7368(1110011001000)返回4. int __builtin_clz (unsigned int x) 返回前导的0的个数. int __builtin_ctz (unsigned int x) 返回后面的0个个数,和__builtin_clz相对. int __builtin_popcount (unsigned int x) 返回二进制表示中1的个数. int __b

【转】gcc的__builtin_函数介绍

转自:http://blog.csdn.net/jasonchen_gbd/article/details/44948523 GCC提供了一系列的builtin函数,可以实现一些简单快捷的功能来方便程序编写,另外,很多builtin函数可用来优化编译结果.这些函数以"__builtin_"作为函数名前缀.很多C标准库函数都有与之对应的GCC builtin函数,例如strcpy()有对应的__builtin_strcpy()内建函数.下面就介绍一些builtin函数及其作用: __bu

glibc的几个有用的处理二进制位的内置函数(转)

- Built-in Function: int __builtin_ffs (unsigned int x) Returns one plus the index of the least significant 1-bit of x, or if x is zero, returns zero. 返回右起第一个'1'的位置. - Built-in Function: int __builtin_clz (unsigned int x) Returns the number of leadin

GCC自带位运算系列函数

谈到GCC的黑科技,大家想到的一定是这句: #pragma GCC optimize (3)//吸氧 抑或是这句: #pragma GCC diagnostic error "-std=c++11"//C++11 然而又有多少人知道__builtin_xxx()这群神奇的存在? 举个栗子:树状数组的核心思想就是一个叫做lowbit()的函数,它是这样写的: inline int lowbit(const int &x) { return x & -x; } 什么,你说长

gcc的__builtin_函数(注意前面是两个下划线)

说明: GCC provides a large number of built-in functions other than the ones mentioned above. Some of these are for internal use in the processing of exceptions or variable-length argument lists and will not be documented here because they may change fr

[HAOI2012] 外星人 - 数论,欧拉函数

给定一个正整数的标准分解形式,求最小的 \(x\) 使得 \(\varphi^x(N)=1\),其中 \(\varphi(x)\) 表示 Euler 函数的 \(x\) 重嵌套.\(T\leq50, p_i\leq 10^5,q_i\leq10^9\) Solution 观察到只有 \(\varphi(2)=1\),而对于 \(2^n\) 操作次数为 \(n\) 对任意一个大于 \(2\) 的质数,每次操作都至少会产生一个 \(2\) 因子,同时每次操作都会消除一个 \(2\) 因子 所以问题转