#define BIT_POS(N) ( 1U << (N) )
#define SET_FLAG(N, F) ( (N) |= (F) )
#define CLR_FLAG(N, F) ( (N) &= -(F) )
#define TST_FLAG(N, F) ( (N) & (F) )
#define BIT_RANGE(N, M) ( BIT_POS((M)+1 - (N))-1 << (N) )
#define BIT_SHIFTL(B, N) ( (unsigned)(B) << (N) )
#define BIT_SHIFTR(B, N) ( (unsigned)(B) >> (N) )
#define SET_MFLAG(N, F, V) ( CLR_FLAG(N, F), SET_FLAG(N, V) )
#define CLR_MFLAG(N, F) ( (N) &= ~(F) )
#define GET_MFLAG(N, F) ( (N) & (F) )
#include <stdio.h>
void main( )
{
unsigned char ascii_char = 'A' ; /* char = 8 bits only */
int test_nbr = 10 ;
printf ( "Starting character = %c\n " , ascii_char
) ; /* The 5th bit position determines if the character is
uppercase or lowercase.
5th bit = 0 - Uppercase
5th bit = 1 - Lowercase */
printf ( "\n Turn 5th bit on = %c\n " , SET_FLAG
( ascii_char
, BIT_POS
( 5 ) ) ) ; printf ( "Turn 5th bit off = %c\n \n " , CLR_FLAG
( ascii_char
, BIT_POS
( 5 ) ) ) ; printf ( "Look at shifting bits\n " ) ; printf ( "=====================\n " ) ; printf ( "Current value = %d\n " , test_nbr
) ; printf ( "Shifting one position left = %d\n " , test_nbr = BIT_SHIFTL( test_nbr, 1 ) ) ;
printf ( "Shifting two positions right = %d\n " , BIT_SHIFTR( test_nbr, 2 ) ) ;
}
I2RlZmluZSBCSVRfUE9TKE4pICAgICAgICAgICAgKCAxVSA8PCAoTikgKQojZGVmaW5lIFNFVF9GTEFHKE4sIEYpICAgICAgICAoIChOKSB8PSAoRikgKQojZGVmaW5lIENMUl9GTEFHKE4sIEYpICAgICAgICAoIChOKSAmPSAtKEYpICkKI2RlZmluZSBUU1RfRkxBRyhOLCBGKSAgICAgICAgKCAoTikgJiAoRikgKQojZGVmaW5lIEJJVF9SQU5HRShOLCBNKSAgICAgICAoIEJJVF9QT1MoKE0pKzEgLSAoTikpLTEgPDwgKE4pICkKI2RlZmluZSBCSVRfU0hJRlRMKEIsIE4pICAgICAgKCAodW5zaWduZWQpKEIpIDw8IChOKSApCiNkZWZpbmUgQklUX1NISUZUUihCLCBOKSAgICAgICggKHVuc2lnbmVkKShCKSA+PiAoTikgKQojZGVmaW5lIFNFVF9NRkxBRyhOLCBGLCBWKSAgICAoIENMUl9GTEFHKE4sIEYpLCBTRVRfRkxBRyhOLCBWKSApCiNkZWZpbmUgQ0xSX01GTEFHKE4sIEYpICAgICAgICggKE4pICY9IH4oRikgKQojZGVmaW5lIEdFVF9NRkxBRyhOLCBGKSAgICAgICAoIChOKSAmIChGKSApCiNpbmNsdWRlIDxzdGRpby5oPgp2b2lkIG1haW4oKQp7CiAgdW5zaWduZWQgY2hhciBhc2NpaV9jaGFyID0gJ0EnOyAgICAgICAgLyogIGNoYXIgPSA4IGJpdHMgb25seSAqLwogIGludCB0ZXN0X25iciA9IDEwOwogIHByaW50ZigiU3RhcnRpbmcgY2hhcmFjdGVyID0gJWNcbiIsIGFzY2lpX2NoYXIpOwogIC8qICBUaGUgNXRoIGJpdCBwb3NpdGlvbiBkZXRlcm1pbmVzIGlmIHRoZSBjaGFyYWN0ZXIgaXMKICAgICAgdXBwZXJjYXNlIG9yIGxvd2VyY2FzZS4KICAgICAgNXRoIGJpdCA9IDAgIC0gVXBwZXJjYXNlCiAgICAgIDV0aCBiaXQgPSAxICAtIExvd2VyY2FzZSAgICAgICovCiAgcHJpbnRmKCJcblR1cm4gNXRoIGJpdCBvbiA9ICVjXG4iLCBTRVRfRkxBRyhhc2NpaV9jaGFyLCBCSVRfUE9TKDUpKSApOwogIHByaW50ZigiVHVybiA1dGggYml0IG9mZiA9ICVjXG5cbiIsIENMUl9GTEFHKGFzY2lpX2NoYXIsIEJJVF9QT1MoNSkpICk7CiAgcHJpbnRmKCJMb29rIGF0IHNoaWZ0aW5nIGJpdHNcbiIpOwogIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09XG4iKTsKICBwcmludGYoIkN1cnJlbnQgdmFsdWUgPSAlZFxuIiwgdGVzdF9uYnIpOwogIHByaW50ZigiU2hpZnRpbmcgb25lIHBvc2l0aW9uIGxlZnQgPSAlZFxuIiwKICAgICAgICAgdGVzdF9uYnIgPSBCSVRfU0hJRlRMKHRlc3RfbmJyLCAxKSApOwogIHByaW50ZigiU2hpZnRpbmcgdHdvIHBvc2l0aW9ucyByaWdodCA9ICVkXG4iLAogICAgICAgICBCSVRfU0hJRlRSKHRlc3RfbmJyLCAyKSApOwp9