xref: /freebsd/lib/libc/stdbit/stdc_has_single_bit.c (revision 6296500a85c8474e3ff3fe2f8e4a9d56dd0acd64)
1*6296500aSRobert Clausecker /*
2*6296500aSRobert Clausecker  * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org>
3*6296500aSRobert Clausecker  *
4*6296500aSRobert Clausecker  * SPDX-License-Identifier: BSD-2-Clause
5*6296500aSRobert Clausecker  */
6*6296500aSRobert Clausecker 
7*6296500aSRobert Clausecker #include <stdbit.h>
8*6296500aSRobert Clausecker #include <stdbool.h>
9*6296500aSRobert Clausecker 
10*6296500aSRobert Clausecker bool
stdc_has_single_bit_uc(unsigned char x)11*6296500aSRobert Clausecker stdc_has_single_bit_uc(unsigned char x)
12*6296500aSRobert Clausecker {
13*6296500aSRobert Clausecker 	return (x != 0 && (x & x - 1) == 0);
14*6296500aSRobert Clausecker }
15*6296500aSRobert Clausecker 
16*6296500aSRobert Clausecker bool
stdc_has_single_bit_us(unsigned short x)17*6296500aSRobert Clausecker stdc_has_single_bit_us(unsigned short x)
18*6296500aSRobert Clausecker {
19*6296500aSRobert Clausecker 	return (x != 0 && (x & x - 1) == 0);
20*6296500aSRobert Clausecker }
21*6296500aSRobert Clausecker 
22*6296500aSRobert Clausecker bool
stdc_has_single_bit_ui(unsigned int x)23*6296500aSRobert Clausecker stdc_has_single_bit_ui(unsigned int x)
24*6296500aSRobert Clausecker {
25*6296500aSRobert Clausecker 	return (x != 0 && (x & x - 1) == 0);
26*6296500aSRobert Clausecker }
27*6296500aSRobert Clausecker 
28*6296500aSRobert Clausecker bool
stdc_has_single_bit_ul(unsigned long x)29*6296500aSRobert Clausecker stdc_has_single_bit_ul(unsigned long x)
30*6296500aSRobert Clausecker {
31*6296500aSRobert Clausecker 	return (x != 0 && (x & x - 1) == 0);
32*6296500aSRobert Clausecker }
33*6296500aSRobert Clausecker 
34*6296500aSRobert Clausecker bool
stdc_has_single_bit_ull(unsigned long long x)35*6296500aSRobert Clausecker stdc_has_single_bit_ull(unsigned long long x)
36*6296500aSRobert Clausecker {
37*6296500aSRobert Clausecker 	return (x != 0 && (x & x - 1) == 0);
38*6296500aSRobert Clausecker }
39