BITSTRING(3)
okay bestie, welcome to bitstring(3) from the Library Functions Manual β the bit-string manipulation functions and macros page, and yes it's giving useful π
π NAME π
bit_alloc, bit_clear, bit_count, bit_decl, bit_ffc, bit_ffs, bit_ff_at, bit_ffc_at, bit_ffs_at, bit_ffc_area, bit_ffs_area, bit_ff_area_at, bit_ffc_area_at, bit_ffs_area_at, bit_nclear, bit_nset, bit_ntest, bit_set, bit_test, bitstr_size β bit-string manipulation functions and macros πΈ
β¨ SYNOPSIS β¨
#include <bitstring.h>
bitstr_t *
bit_alloc(size_t nbits);
void
bit_decl(bitstr_t *name, size_t nbits);
void
bit_clear(bitstr_t *name, size_t bit);
void
bit_count(bitstr_t *name, size_t count, size_t nbits, ssize_t *value);
void
bit_ffc(bitstr_t *name, size_t nbits, ssize_t *value);
void
bit_ffs(bitstr_t *name, size_t nbits, ssize_t *value);
void
bit_ffc_at(bitstr_t *name, size_t start, size_t nbits, ssize_t *value);
void
bit_ffs_at(bitstr_t *name, size_t start, size_t nbits, ssize_t *value);
void
bit_ff_at(bitstr_t *name, size_t start, size_t nbits, int match,
ssize_t *value);
void
bit_ffc_area(bitstr_t *name, size_t nbits, size_t size, ssize_t *value);
void
bit_ffs_area(bitstr_t *name, size_t nbits, size_t size, ssize_t *value);
void
bit_ffc_area_at(bitstr_t *name, size_t start, size_t nbits, size_t size,
ssize_t *value);
void
bit_ffs_area_at(bitstr_t *name, size_t start, size_t nbits, size_t size,
ssize_t *value);
void
bit_ff_area_at(bitstr_t *name, size_t start, size_t nbits, size_t size,
int match, ssize_t *value);
bit_foreach(bitstr_t *name, size_t nbits, size_t var);
bit_foreach_at(bitstr_t *name, size_t start, size_t nbits, size_t var);
bit_foreach_unset(bitstr_t *name, size_t nbits, size_t var);
bit_foreach_unset_at(bitstr_t *name, size_t start, size_t nbits,
size_t var);
void
bit_nclear(bitstr_t *name, size_t start, size_t stop);
void
bit_nset(bitstr_t *name, size_t start, size_t stop);
int
bit_ntest(bitstr_t *name, size_t start, size_t stop, int match);
void
bit_set(bitstr_t *name, size_t bit);
int
bitstr_size(size_t nbits);
int
bit_test(bitstr_t *name, size_t bit);
π¦ DESCRIPTION π¦
These macros operate on strings of bits. That's the whole vibe: little bits, all lined up, getting set, cleared, tested, and counted π
bit_alloc()β returns a pointer of typebitstr_t *to enough space to storenbitsbits, orNULLif no space is available. If it succeeds, the returned bit string is initialized with all bits cleared β¨bit_decl()β this macro declares a bit string with enough space to storenbitsbits. You can usebit_decl()to include statically sized bit strings in structure definitions or to create bit strings on the stack. You are responsible for initializing the bit string, typically via a global initialization of the containing struct or by using thebit_nset()orbin_nclear()functions π«Άbitstr_size()β this macro returns the number of bytes necessary to storenbitsbits. It's useful for copying bit strings πbit_clear()andbit_set()β these functions clear or set the zero-based numbered bitbit, in the bit stringnameπ§bit_nset()andbit_nclear()β these functions set or clear the zero-based numbered bits fromstartthroughstopin the bit stringnameπbit_test()β this function evaluates to non-zero if the zero-based numbered bitbitof bit stringnameis set, and zero otherwise πbit_ntest()β this function evaluates to non-zero if the zero-based numbered bits fromstartthroughstopin the bit stringnameall have the valuematchπbit_ffc()β stores in the location referenced byvaluethe zero-based number of the first bit not set in the array ofnbitsbits referenced byname. If all bits are set, the location referenced byvalueis set to-1πbit_ffs()β stores in the location referenced byvaluethe zero-based number of the first bit set in the array ofnbitsbits referenced byname. If no bits are set, the location referenced byvalueis set to-1π₯bit_ffc_at()β stores in the location referenced byvaluethe zero-based number of the first bit not set in the array ofnbitsbits referenced byname, at or after the zero-based bit indexstart. If all bits at or afterstartare set, the location referenced byvalueis set to-1πbit_ffs_at()β stores in the location referenced byvaluethe zero-based number of the first bit set in the array ofnbitsbits referenced byname, at or after the zero-based bit indexstart. If no bits are set afterstart, the location referenced byvalueis set to-1βbit_ff_at()β stores in the location referenced byvaluethe zero-based number of the first bit in the array ofnbitsbits referenced byname, at or after the zero-based bit indexstart, that has valuematch. If no bits afterstartmatch that value, the location referenced byvalueis set to-1πΈbit_ffc_area()β stores in the location referenced byvaluethe zero-based number of the first bit beginning a sequence of unset bits of at leastsizeunset bits in the array ofnbitsbits referenced byname. If no sequence of contiguous unset bits of the specified size can be found, the location referenced byvalueis set to-1πbit_ffs_area()β stores in the location referenced byvaluethe zero-based number of the first bit beginning a sequence of set bits of at leastsizeset bits in the array ofnbitsbits referenced byname. If no sequence of contiguous set bits of the specified size can be found, the location referenced byvalueis set to-1πbit_ffc_area_at()β stores in the location referenced byvaluethe zero-based number of the first bit beginning a sequence of unset bits of at leastsizeunset bits in the array ofnbitsbits referenced byname, at or after the zero-based bit indexstart. If no sequence of contiguous unset bits of the specified size can be found at or afterstart, the location referenced byvalueis set to-1πbit_ffs_area_at()β stores in the location referenced byvaluethe zero-based number of the first bit beginning a sequence of set bits of at leastsizeset bits in the array ofnbitsbits referenced byname, at or after the zero-based bit indexstart. If no sequence of contiguous set bits of the specified size can be found at or afterstart, the location referenced byvalueis set to-1πbit_ff_area_at()β stores in the location referenced byvaluethe zero-based number of the first bit beginning a sequence of bits of at leastsizebits in the array ofnbitsbits referenced byname, at or after the zero-based bit indexstart, in which all bits have the valuematch. If no sequence of contiguous such bits of the specified size can be found at or afterstart, the location referenced byvalueis set to-1π¦bit_count()β stores in the location referenced byvaluethe number of bits set in the array ofnbitsbits referenced byname, at or after the zero-based bit indexstart. tiny note: the synopsis names that argcountwhile the prose saysstartβ I'm just reporting the vibes, bestie πbit_foreach()β this macro traverses all set bits in the array ofnbitsreferenced bynamein the forward direction, assigning each location in turn tovarβ¨bit_foreach_at()β this macro traverses all set bits in the array ofnbitsreferenced bynamein the forward direction at or after the zero-based bit indexstart, assigning each location in turn tovarπbit_foreach_unset()β this macro traverses all unset bits in the array ofnbitsreferenced bynamein the forward direction, assigning each location in turn tovarπbit_foreach_unset_at()β this macro traverses all unset bits in the array ofnbitsreferenced bynamein the forward direction at or after the zero-based bit indexstart, assigning each location in turn tovarπ«Ά
The arguments in bit string macros are evaluated only once and may safely have side effects. so yes, you can be a little chaotic with them, periodt π
π§ EXAMPLES π§
#include <limits.h>
#include <bitstring.h>
...
#define LPR_BUSY_BIT 0
#define LPR_FORMAT_BIT 1
#define LPR_DOWNLOAD_BIT 2
...
#define LPR_AVAILABLE_BIT 9
#define LPR_MAX_BITS 10
make_lpr_available()
{
bitstr_t bit_decl(bitlist, LPR_MAX_BITS);
...
bit_nclear(bitlist, 0, LPR_MAX_BITS - 1);
...
if (!bit_test(bitlist, LPR_BUSY_BIT)) {
bit_clear(bitlist, LPR_FORMAT_BIT);
bit_clear(bitlist, LPR_DOWNLOAD_BIT);
bit_set(bitlist, LPR_AVAILABLE_BIT);
}
}
π SEE ALSO π
malloc(3), stdbit(3), bitset(9) π
β HISTORY β
The bitstring functions first appeared in 4.4BSD. iconic behavior, honestly π
this page is from Debian, dated November 21, 2023, and the manual is BITSTRING(3) β bye bestie, go set some bits πβ¨
π¦ where this page comes from
- freebsd 15.1: base 15.1
- Copyright (c) 1989, 1991, 1993 The Regents of the University of California. All rights reserved
- Copyright (c) 2014,2016 Spectra Logic Corporation
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms