bits.h - Bits management unit


This file contains basic routines necessary to access single or multiple bits in a number.

The routines are implemented as macros. In this way they do not introduce overhead. But be aware that the expressions are not evaluated before the call and there is no type checking.



bits_get_bit(nr,shift)

Parameters:

NameIN/OUTRecomended typeDescriptionAcesses
nrINunsigned int
unsigned short
unsigned char
Input value1 read
shiftINunsigned charBit number1 read

Returns:

Result bit value

Example:

bit=bits_get_bit(16,4);
/* bit==1 */
bit=bits_get_bit(16,3);
/* bit==0 */
bit=bits_get_bit(16,5);
/* bit==0 */

bits_get_bits(nr,shift,nrbits)

Parameters:

NameIN/OUTRecomended typeDescriptionAcesses
nrINunsigned int
unsigned short
unsigned char
Input value1 read
shiftINunsigned charRightmost bit1 read
nrbitsINunsigned char, <32Nr of bits1 read

Returns:

Result bits value

Example:

bits=bits_get_bits(16,4,2);
/* bits==1 */
bits=bits_get_bits(16,3,2);
/* bits==2 */
bits=bits_get_bits(16,5,2);
/* bits==0 */
bits=bits_get_bits(16,0,4);
/* bits==0 */
bits=bits_get_bits(16,0,5);
/* bits==16 */

bits_get_bits_mask(nr,shift,mask)

Parameters:

NameIN/OUTRecomended typeDescriptionAcesses
nrINunsigned int
unsigned short
unsigned char
Input value1 read
shiftINunsigned charRightmost bit1 read
maskINsame as nrMask of bits1 read

Returns:

Result bits value

Example:

bits=bits_get_bits_mask(16,4,1);
/* bits==1 */
bits=bits_get_bits_mask(16,3,1);
/* bits==2 */
bits=bits_get_bits_mask(16,5,1);
/* bits==0 */
bits=bits_get_bits_mask(16,0,15);
/* bits==0 */
bits=bits_get_bits_mask(16,0,31);
/* bits==16 */
bits=bits_get_bits_mask(16,0,16);
/* bits==16 */
bits=bits_get_bits_mask(16,1,16);
/* bits==0 */

bits_pos_bit(bit,shift)

Parameters:

NameIN/OUTRecomended typeDescriptionAcesses
bitINunsigned charBit value1 read
shiftINunsigned charBit number1 read

Returns:

Value with the bit on the right place

Example:

nr=bits_pos_bit(1,4);
/* nr==16 */
nr=bits_pos_bit(1,3);
/* nr=8 */
nr=bits_pos_bit(1,5);
/* nr=32 */
nr=bits_pos_bit(0,<any value>);
/* nr==0 */

bits_pos_bits(bits,shift,nrbits)

Parameters:

NameIN/OUTRecomended typeDescriptionAcesses
bitsINunsigned int
unsigned short
unsigned char
Bits value1 read
shiftINunsigned charRightmost bit1 read
nrbitsINunsigned char, <32Nr of bits1 read

Returns:

Value with the bit on the right place

Example:

nr=bits_pos_bits(0,<any value>,<any value>);
/* nr==0 */
nr=bits_pos_bits(<any value>,<any value>,0);
/* nr==0 */
nr=bits_pos_bits(3,3,2);
/* bits==24 */
nr=bits_pos_bits(4,3,2);
/* nr==0 , 4&3=0 => ==bits_pos_bits(0,3,2)*/
nr=bits_pos_bits(2,5,2);
/* nr==64 */
nr=bits_pos_bits(1,5,2);
/* nr==32 */

bits_pos_bits_mask(bits,shift,mask)

Parameters:

NameIN/OUTRecomended typeDescriptionAcesses
bitsINunsigned int
unsigned short
unsigned char
Bits value1 read
shiftINunsigned charRightmost bit1 read
maskINsame as nrMask of bits1 read

Returns:

Value with the bit on the right place

Example:

nr=bits_pos_bits_mask(0,<any value>,<any value>);
/* nr==0 */
nr=bits_pos_bits_mask(<any value>,<any value>,0);
/* nr==0 */
nr=bits_pos_bits_mask(0xff,1,0xff);
/* nr==0x1fe */
nr=bits_pos_bits_mask(0xff,8,0xef);
/* nr==0xef00 == bits_pos_bits_mask(0xef,8,0xff)*/

bits_set_bit(nr,shift,bit)

Parameters:

NameIN/OUTRecomended typeDescriptionAcesses
nrINunsigned int
unsigned short
unsigned char
Value to be modified1 read
shiftINunsigned charBit number2 reads
bitINunsigned charNew bit value1 read

Returns:

Modified value

Example:

nr=bits_set_bit(16,4,0);
/* nr==0 */

nr=bits_set_bit(16,4,1);
/* nr==16 */

nr=16;
nr1=bits_set_bit(nr,3,0);
/* nr1==16 */

nr=16;
nr=bits_set_bit(nr,3,1);
/* nr==24 */

bits_set_bits(nr,shift,nrbits,bits)

Parameters:

NameIN/OUTRecomended typeDescriptionAcesses
nrINunsigned int
unsigned short
unsigned char
Value to be modified1 read
shiftINunsigned charRightmost bit2 reads
nrbitsINunsigned char, <32Nr of bits2 reads
bitsINunsigned charNew bit value1 read

Returns:

Modified value

Example:

nr=16;
nr1=bits_set_bits(nr,4,1,0);
/* nr1==0 */

nr=16;
nr1=bits_set_bits(nr,4,1,1);
/* nr1==1 */

nr=16;
nr=bits_set_bits(nr,3,1,0);
/* nr==16 */

nr=16;
nr=bits_set_bits(nr,3,1,1);
/* nr==24 */

nr=bits_set_bits(16,3,2,0);
/* nr==0 */

nr=16;
nr1=bits_set_bits(nr,3,2,1);
/* nr1==8 */

nr=16;
nr1=bits_set_bits(nr,3,2,2);
/* nr1==16 */

bits_set_bits_mask(nr,shift,mask,bits)

Parameters:

NameIN/OUTRecomended typeDescriptionAcesses
nrINunsigned int
unsigned short
unsigned char
Value to be modified1 read
shiftINunsigned charRightmost bit2 reads
maskINunsigned char, <32Mask of bits2 reads
bitsINunsigned charNew bit value1 read

Returns:

Modified value

Example:

nr=16;
nr1=bits_set_bits_mask(nr,4,1,0);
/* nr1==0 */

nr=16;
nr1=bits_set_bits_mask(nr,4,1,1);
/* nr1==16 */

nr=16;
nr1=bits_set_bits_mask(nr,3,1,0);
/* nr1==16 */

nr=16;
nr1=bits_set_bits_mask(nr,3,1,1);
/* nr1==24 */

nr=16;
nr1=bits_set_bits_mask(nr,3,3,0);
/* nr1==0 */

nr=16;
nr1=bits_set_bits_mask(nr,3,3,1);
/* nr1==8 */

nr=16;
nr1=bits_set_bits_mask(nr,3,3,2);
/* nr1==16 */

nr=16;
nr1=bits_set_bits_mask(nr,3,5,0);
/* nr1==16 */

nr=bits_set_bits_mask(16,3,5,1);
/* nr==24 */

nr=bits_set_bits_mask(16,3,5,4);
/* nr==48 */


Top of the page.
Send comments to: Igor Sfiligoi

Created:17.1.1997
Last modified:10.2.1997