Logo DASEJ

 

     
 


Operacje na bitach dla C
 

Operacja

Zapis i wykonanie

Ustaw jeden bit

in bajt 11110000
bajt |=(1<<0)
out bajt 11110001

Ustaw jeden bit i kasuj resztę

in bajt 11110000
bajt =(1<<0)
out bajt 00000001

Ustaw kilku bitów jednocześnie

in bajt 10000001
bajt |=(1<<6 | 1<<5 | 3<<1)
out bajt 11100111

Ustaw kilku bitów jednocześnie

in bajt 11000000
bajt |=(7<<0)
out bajt 11000111

Kasowanie jednego bitu

in bajt 11110000
bajt &=~(1<<6)
out bajt 10110000

Kasowanie jednego bitu i ustawienie reszty na 1

in bajt 11110000
bajt =~(1<<6)
out bajt 10111111

Kasowanie kilku bitów w bajcie

in bajt 11110000
bajt &=~(1<<6 | 1<<5)
out bajt 10010000

Kasowanie kilku bitów w bajcie inny przykład

in bajt 11111111
bajt &=~(1<<6 | 1<<5 | 3<<1)
out bajt 10011001

Operacje warunkowe, efekt operacji

in bajt 11000000
(!(bajt & (1<<7)))
out bajt 00000000


in bajt 11000000
((bajt & (1<<7)))
out bajt 10000000


in bajt 11000011
(bajt & (1<<1))
out bajt 00000010

if ((bajt & (1 << 1)) == 0)

in bajt 11000011
out false
in bajt 11000001
out true

Negacja bitów

in bajt 11000011
bajt^(1<<1 | 1<<2)
out bajt 11000101



Tabela przedstawiająca liczby dziesiętne heksadecymalny i binarne.


Dec Hex Bin
0 0x00 0b00000000
1 0x01 0b00000001
2 0x02 0b00000010
3 0x03 0b00000011
4 0x04 0b00000100
5 0x05 0b00000101
6 0x06 0b00000110
7 0x07 0b00000111
8 0x08 0b00001000
9 0x09 0b00001001
10 0x0A 0b00001010
11 0x0B 0b00001011
12 0x0C 0b00001100
13 0x0D 0b00001101
14 0x0E 0b00001110
15 0x0F 0b00001111

Zapisy Hex i Bin są przedstawione w wersji całego bajtu ( ośmiu bitów )


Konwersja liczb na postać binarną
 - dec8bin typ uint8_t konwertuje do postaci ośmiu bitów
 - dec16bin typ uint16_t konwertuje do postaci szesnasto bitowej

 


void dec8bin (char *s, uint8_t val)
{
         char *p;
         uint8_t t;
         p = s;
         t = 0x80;
         for ( ; t > 0; t = t >> 1)
            {
               if (val & t) *p++ = '1';
                        else *p++ = '0';
            }
         *p = 0;
}

void dec16bin (char *s, uint16_t val)
{
          char *p;
          uint16_t t;
          p = s;
          t = 0x8000;
          for ( ; t > 0; t = t >> 1)
             {
                if (val & t) *p++ = '1';
                         else *p++ = '0';
             }
         *p = 0;
}
 

 

Zastosowanie.

char buffBin[32]; // deklaracja bufora

dec8bin(buffBin,bajt); // konwertowanie liczby 'bajt' do tekstu i wpisanie do bufora buffBin
rsPrintLn(buffBin); // wysłanie tekstu do terminala przez uart

 



strzałka