xref: /freebsd/lib/libc/stdbit/stdc_has_single_bit.3 (revision d790b16bbf0c3055ef00200d01659dfb3c0e5e5e)
1*d790b16bSRobert Clausecker.\"
2*d790b16bSRobert Clausecker.\" Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org>
3*d790b16bSRobert Clausecker.\"
4*d790b16bSRobert Clausecker.\" SPDX-License-Identifier: BSD-2-Clause
5*d790b16bSRobert Clausecker.\"
6*d790b16bSRobert Clausecker.Dd November 9, 2025
7*d790b16bSRobert Clausecker.Dt STDC_HAS_SINGLE_BIT 3
8*d790b16bSRobert Clausecker.Os
9*d790b16bSRobert Clausecker.Sh NAME
10*d790b16bSRobert Clausecker.Nm stdc_has_single_bit
11*d790b16bSRobert Clausecker.Nd check for single bit set
12*d790b16bSRobert Clausecker.Sh SYNOPSIS
13*d790b16bSRobert Clausecker.Lb libc
14*d790b16bSRobert Clausecker.In stdbit.h
15*d790b16bSRobert Clausecker.Ft bool
16*d790b16bSRobert Clausecker.Fn stdc_has_single_bit_uc "unsigned char value"
17*d790b16bSRobert Clausecker.Ft bool
18*d790b16bSRobert Clausecker.Fn stdc_has_single_bit_us "unsigned short value"
19*d790b16bSRobert Clausecker.Ft bool
20*d790b16bSRobert Clausecker.Fn stdc_has_single_bit_ui "unsigned int value"
21*d790b16bSRobert Clausecker.Ft bool
22*d790b16bSRobert Clausecker.Fn stdc_has_single_bit_ul "unsigned long value"
23*d790b16bSRobert Clausecker.Ft bool
24*d790b16bSRobert Clausecker.Fn stdc_has_single_bit_ull "unsigned long long value"
25*d790b16bSRobert Clausecker.Ft bool
26*d790b16bSRobert Clausecker.Fn stdc_has_single_bit "value"
27*d790b16bSRobert Clausecker.Sh DESCRIPTION
28*d790b16bSRobert ClauseckerThe
29*d790b16bSRobert Clausecker.Nm stdc_has_single_bit_ Ns Em type Ns ()
30*d790b16bSRobert Clauseckerfamily of functions checks if there is exactly one bit
31*d790b16bSRobert Clauseckerset in
32*d790b16bSRobert Clausecker.Fa value ,
33*d790b16bSRobert Clauseckerwhere
34*d790b16bSRobert Clausecker.Fa value
35*d790b16bSRobert Clauseckeris of type
36*d790b16bSRobert Clausecker.Va unsigned char ,
37*d790b16bSRobert Clausecker.Va unsigned short ,
38*d790b16bSRobert Clausecker.Va unsigned int ,
39*d790b16bSRobert Clausecker.Va unsigned long ,
40*d790b16bSRobert Clauseckeror
41*d790b16bSRobert Clausecker.Va unsigned long long
42*d790b16bSRobert Clauseckerfor
43*d790b16bSRobert Clausecker.Em type
44*d790b16bSRobert Clauseckerbeing
45*d790b16bSRobert Clausecker.Sy uc ,
46*d790b16bSRobert Clausecker.Sy us ,
47*d790b16bSRobert Clausecker.Sy ui ,
48*d790b16bSRobert Clausecker.Sy ul ,
49*d790b16bSRobert Clauseckeror
50*d790b16bSRobert Clausecker.Sy ull
51*d790b16bSRobert Clauseckerrespectively.
52*d790b16bSRobert ClauseckerThe
53*d790b16bSRobert Clausecker.Fn stdc_has_single_bit "value"
54*d790b16bSRobert Clauseckertype-generic macro picks the appropriate
55*d790b16bSRobert Clausecker.Nm stdc_has_single_bit_ Ns Em type Ns ()
56*d790b16bSRobert Clauseckerfunction based on the type of
57*d790b16bSRobert Clausecker.Fa value .
58*d790b16bSRobert Clausecker.Pp
59*d790b16bSRobert ClauseckerThe functions in this family behave similarly to the
60*d790b16bSRobert Clausecker.Fn powerof2 "value"
61*d790b16bSRobert Clauseckermacro of
62*d790b16bSRobert Clausecker.In sys/param.h ,
63*d790b16bSRobert Clauseckerbut differ when
64*d790b16bSRobert Clausecker.Fa value
65*d790b16bSRobert Clauseckeris zero: while
66*d790b16bSRobert Clausecker.Fn powerof2
67*d790b16bSRobert Clauseckerconsiders zero to be a power of two,
68*d790b16bSRobert Clausecker.Fn stdc_has_single_bit
69*d790b16bSRobert Clauseckerdoes not.
70*d790b16bSRobert Clausecker.Sh RETURN VALUES
71*d790b16bSRobert ClauseckerReturns
72*d790b16bSRobert Clausecker.Sy true
73*d790b16bSRobert Clauseckerif exactly one bit is set in
74*d790b16bSRobert Clausecker.Fa value ,
75*d790b16bSRobert Clauseckerotherwise returns
76*d790b16bSRobert Clausecker.Sy false .
77*d790b16bSRobert ClauseckerI.\^e. the function determines if
78*d790b16bSRobert Clausecker.Fa value
79*d790b16bSRobert Clauseckeris a power of two.
80*d790b16bSRobert Clausecker.Sh SEE ALSO
81*d790b16bSRobert Clausecker.Xr stdbit 3 ,
82*d790b16bSRobert Clausecker.Xr stdc_count_ones 3
83*d790b16bSRobert Clausecker.Sh STANDARDS
84*d790b16bSRobert ClauseckerThe
85*d790b16bSRobert Clausecker.Nm stdc_has_single_bit_ Ns Em type Ns ()
86*d790b16bSRobert Clauseckerfamily of functions and the
87*d790b16bSRobert Clausecker.Fn stdc_has_single_bit
88*d790b16bSRobert Clauseckertype-generic macro conform to
89*d790b16bSRobert Clausecker.St -isoC-2023 .
90*d790b16bSRobert Clausecker.Sh HISTORY
91*d790b16bSRobert ClauseckerThe
92*d790b16bSRobert Clausecker.Nm stdc_has_single_bit_ Ns Em type Ns ()
93*d790b16bSRobert Clauseckerfamily of functions and the
94*d790b16bSRobert Clausecker.Fn stdc_has_single_bit
95*d790b16bSRobert Clauseckertype-generic macro were added in
96*d790b16bSRobert Clausecker.Fx 15.1.
97*d790b16bSRobert Clausecker.Sh AUTHOR
98*d790b16bSRobert Clausecker.An Robert Clausecker Aq Mt fuz@FreeBSD.org
99