Operacje bitowe - przedstawienie bitów

0

Hej! Moim zadaniem jest w oparciu o funkcję dwojkowo(int liczba, char binarnie[]) zademonstrować działanie operatorów bitowych & (AND), | (OR), ~ (NOT), ^ (XOR), << (przesunięcie w lewo), >> (przesunięcie w prawo).

Mam kod, powinien być dla mnie wskazówką ale nie bardzo wiem jak się do tego zabrać, gdzie konkretnie przedstawić działanie operatorów?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
unsigned int bin2int(char dwojkowo[]){ /* dla liczb dodatnich /
int liczba=0, k; /
strlen(...) zwraca dlugosc napisu: /
for(k=0; k<strlen(dwojkowo); k++ ){
liczba=liczba
2; /* lub: liczba=liczba << 1; przesun bity o 1 w lewo /
liczba=liczba+(dwojkowo[k]=='1' ? 1 : 0);
}
return liczba;
}
void odKonca(char napis[]){
int k, dlugosc;
char tmp;
dlugosc=strlen(napis); /
strlen(...) zwraca dlugosc tekstu /
for(k=0; k<dlugosc/2; k++){
tmp=napis[k];
napis[k]=napis[dlugosc-k-1];
napis[dlugosc-k-1]=tmp;
}
}
/
dziala tylko dla liczb nieujemnych ! /
void dwojkowo(unsigned int liczba, char binarnie[]){
int k=0;
do{
binarnie[k++] = liczba%2==1 ? '1' : '0';
liczba=liczba/2; /
lub: liczba=liczba>>1; /
}while(liczba>0);
binarnie[k]='\0'; /
koniec napisu /
odKonca(binarnie);
}
int main(){
unsigned long x;
unsigned int liczba, naturalna;
char binarnie[33], dziesietnie[16];
printf("podaj liczbe dodatnia:");
scanf("%u", &liczba);
dwojkowo(liczba, binarnie); /
zamieniamy na system dwojkowy - wynik
wstawiamy do tablicy binarnie[] /
printf("Podales liczbe %u = %s dwojkowo [z naszej funkcji
dwojkowo()]\n\n", liczba, binarnie);
x=strtoul(binarnie,NULL,2); /
napis dwojkowo -> unsigned long /
sprintf(dziesietnie,"%lu",x); /
liczba dziesietna zapisana jako napis /
printf("zamiana dwojkowo -> dziesietnie:\nliczba=%lu napis=%s\n", x, dziesietnie);
naturalna=bin2int(binarnie); /
dwojkowo -> unsigned int nasza funkcja /
printf("dziesietnie z funkcji bin2int()=%u\n\n", naturalna);
printf("%u = %s dwojkowo [nasza funkcja] = %o osemkowo = %x szesnastkowo\n", liczba, binarnie, liczba, liczba);
/
sprawdzamy, czy po zamianie: liczba -> dwojkowo -> naturalna
dostajemy to samo ;; ustawienie stalej NDEBUG - ignorowanie assert(...) /
assert(liczba==naturalna); /
warunek musi byc prawdziwy ! (niezerowy) */
return 0; }```


```

1 użytkowników online, w tym zalogowanych: 0, gości: 1