ja tam nie wiem na ile to optymalne rozwi膮zanie czy poprawne, ale ja zrobi艂 bym 32 elementow膮 tablic臋, kolejne 0 czy 1 wpisywa艂 do niej zamiast wypisywa膰 na ekran, a nast臋pnie odczyta艂 t臋 tablic臋 od ty艂u
Je艣li chcesz tylko wy艣wietli膰 warto艣膰, to ca艂y kod ma 4 linijki i nie potrzeba tablicy. Cho膰 tak po prawdzie to nic nie trzeba pisa膰, bo s膮 odpowiednie biblioteki od tego. Przyk艂adowy kod:
#include
void main(void)
{
unsigned long int ulLiczba = 123456;
unsigned long int ulFlaga = 1 << (sizeof(ulLiczba) * 8 - 1);
for(; ulFlaga > 0; ulFlaga >>= 1)
printf("%d", ulLiczba & ulFlaga ? 1 : 0);
}
Zasada dzia艂ania jest bardzo prosta. Wyja艣ni臋 poszczeg贸lne fragmenty kodu. - ulLiczba przechowuje warto艣膰, kt贸r膮 chcesz wy艣wietli膰 binarnie; je艣li potrzebujesz j膮 wczyta膰 z klawiatury, ci膮g na warto艣膰 mo偶esz zmieni膰 przy pomocy atoi / atol /atof (zale偶y jakiego typu ma by膰 warto艣膰) - ulFlaga przechowuje flag臋 maskuj膮c膮 jeden bit;
ulFlaga = 1
[00000000|00000000|00000000|00000001]
sizeof(ulLiczba) == 4, bo ulLiczba to unsigned long int przechowywany w 4 bajtach
4 * 8 == 32, czyli ilo艣膰 bit贸w przechowywanych w zmiennej typu unsigned long
32 - 1 == 31, czyli o ile bit贸w w lewo nale偶y przesun膮膰 warto艣膰 z ulFlaga, np:
ulFlaga = 1 << 2 to
[00000000|00000000|00000000|00000100]
ulFlaga = 1 << 8 to
[00000000|00000000|00000001|00000000]
ulFlaga = 1 << 31 to
[10000000|00000000|00000000|00000000]
z ka偶dym cyklem p臋tli for 1 przesuwany w prawo o jeden bit; w ostatnim kroku jedynk臋 przesuniemy z najm艂odszego bitu poza warto艣膰, kt贸r膮 mo偶na zareprezentowa膰 przy pomocy unsigned long int a zatem ulFlaga przyjmie warto艣膰 0 i p臋tla zako艅czy si臋 - maskuj膮c warto艣膰 ulLiczba z ulFlaga sprawdzamy, czy w danym miejscu znajduje si臋 jedynka, np:
Pro艣ciej? U偶y膰 itoa lub ltoa, kt贸re przyjmuje baz臋 systemu liczbowego. Warto si臋 jednak zastanowi膰 jak du偶y bufor jest potrzebny do wykorzystania tej funkcji.