Open In App

Builtin functions of GCC compiler

Improve
Improve
Like Article
Like
Save
Share
Report

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.



Last Updated : 30 Jan, 2023
Like Article
Save Article
Share your thoughts in the comments
Similar Reads