Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Builtin functions of GCC compiler

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

These are four important built-in functions in GCC compiler: 

1. __builtin_popcount(x)

 This function is used to count the number of one’s(set bits) in an integer. 
Example: 

if x = 4
binary value of 4 is 100
Output: No of ones is 1.

C




// C program to illustrate _builtin_popcount(x)
 
#include <stdio.h>
int main()
{
    int n = 5;
 
    printf("Count of 1s in binary of %d is %d ", n,
           __builtin_popcount(n));
    return 0;
}

C++




// C++ program to illustrate _builtin_popcount(x)
 
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int n = 5;
    cout << "Count of 1s in binary of " << n << " is " << __builtin_popcount(n);
    return 0;
}

Output

Count of 1s in binary of 5 is 2 

Time complexity : O(log2(n))
Auxiliary Space: O(1)

Note: Similarly you can use __builtin_popcountl(x) & __builtin_popcountll(x) for long and long long data types.

2 . __builtin_parity(x)

This function is used to check the parity of a number. This function returns true(1) if the number has odd parity else it returns false(0) for even parity. 
Example: 

if x = 7
7 has odd no. of 1's in its binary(111).
Output: Parity of 7 is 1 

C




// C program to illustrate _builtin_parity(x)
 
#include <stdio.h>
int main()
{
    int n = 7;
     
    printf("Parity of %d is %d ",
           n, __builtin_parity(n));
    return 0;
}

C++




// C++ program to illustrate _builtin_parity(x)
 
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int n = 7;
    cout << "Parity of " << n << " is " << __builtin_parity(n);
    return 0;
}

Output

Parity of 7 is 1 

Time complexity : O(log2(n))
Auxiliary Space: O(1)

Note: Similarly you can use __builtin_parityl(x) & __builtin_parityll(x) for long and long long data types.

3.__builtin_clz(x)

This function is used to count the leading zeros of the integer. Note : clz = count leading zero’s. 
Example: It counts number of zeros before the first occurrence of one(set bit). 

a = 16
Binary form of 16 is 00000000 00000000 00000000 00010000
Output: 27

C




// C program to illustrate __builtin_clz(x)
#include <stdio.h>
int main()
{
    int n = 16;
     
    printf("Count of leading zeros before 1 in %d is %d",
           n, __builtin_clz(n));
    return 0;
}

C++




// C++ program to illustrate __builtin_clz(x)
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int n = 16;
    cout<<"Count of leading zeros before 1 in "<< n <<" is "<<__builtin_clz(n);
    return 0;
}

Output

Count of leading zeros before 1 in 16 is 27

Time complexity : O(log2(n))
Auxiliary Space: O(1)
Note: __builtin_clz(x) This function only accept unsigned values 
Note: Similarly you can use __builtin_clzl(x) & __builtin_clzll(x) for long and long long data types.

4.__builtin_ctz(x)

This function is used to count the trailing zeros of the given integer. Note : ctz = count trailing zeros. 
Example: Count no of zeros from last to first occurrence of one(set bit). 

a = 16
Binary form of 16 is 00000000 00000000 00000000 00010000
Output: ctz = 4

C




// C program to illustrate __builtin_ctz(x)
#include <stdio.h>
int main()
{
    int n = 16;
     
    printf("Count of zeros from last to first "
           "occurrence of one is %d",
           __builtin_ctz(n));
    return 0;
}

C++




// C++ program to illustrate __builtin_ctz(x)
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int n = 16;
    cout<<"Count of zeros from last to first occurrence of one is  "<< __builtin_ctz(n);
    return 0;
}

Output

Count of zeros from last to first occurrence of one is 4

Time complexity : O(log2(n))
Auxiliary Space: O(1)
Note: Similarly you can use __builtin_ctzl(x) & __builtin_ctzll(x) for long and long long data types.


My Personal Notes arrow_drop_up
Last Updated : 30 Jan, 2023
Like Article
Save Article
Similar Reads
Related Tutorials