summaryrefslogtreecommitdiffstats
path: root/man3/powerof2.3
diff options
context:
space:
mode:
Diffstat (limited to 'man3/powerof2.3')
-rw-r--r--man3/powerof2.346
1 files changed, 46 insertions, 0 deletions
diff --git a/man3/powerof2.3 b/man3/powerof2.3
new file mode 100644
index 0000000..fae024f
--- /dev/null
+++ b/man3/powerof2.3
@@ -0,0 +1,46 @@
+.\" Copyright (C) 2022 Alejandro Colomar <alx@kernel.org>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH powerof2 3 2023-03-30 "Linux man-pages 6.05.01"
+.SH NAME
+powerof2 \- test if a value is a power of 2
+.SH LIBRARY
+Standard C library
+.RI ( libc )
+.SH SYNOPSIS
+.nf
+.B #include <sys/param.h>
+.PP
+.BI "int powerof2(" x );
+.fi
+.SH DESCRIPTION
+This macro returns true if
+.I x
+is a power of 2,
+and false otherwise.
+.PP
+.B 0
+is considered a power of 2.
+This can make sense considering wrapping of unsigned integers,
+and has interesting properties.
+.SH RETURN VALUE
+True or false,
+if
+.I x
+is a power of 2 or not,
+respectively.
+.SH STANDARDS
+BSD.
+.SH CAVEATS
+The arguments may be evaluated more than once.
+.PP
+Because this macro is implemented using bitwise operations,
+some negative values can invoke undefined behavior.
+For example,
+the following invokes undefined behavior:
+.IR "powerof2(INT_MIN);".
+Call it only with unsigned types to be safe.
+.SH SEE ALSO
+.BR stdc_bit_ceil (3),
+.BR stdc_bit_floor (3)