Dobra, mój arcygienialny facet od programowania, znany też jako "Pączek", wymyślił program którego sam nie rozumie, ja też nie mam pojęcia o co chodzi, ale mam jeszcze was :)
Więc po kolei. Dana jest funkcja:
unsigned getbits(unsigned x, int x, int p)
{
return (( x >> (p+1-n)) &~(~0<<n));
}
Zadanie: napisać funkcję
- czytającą liczbę (unsigned) binarną
- drukujący liczbę (unsigned) binarną
program ma wyglądać tak:
x = czytajBin();
y = getbits(x,5,9);
drukujBin(y);
Oczywiście jak wpiszę do programu "1101" to on widzi to jako int 13 i potem po przejsciu getbits, drukuje znów jako binarkę.
No więc dobra, napisałem program, ale mi się nie podoba, kto mi go poprawi?
#include <stdio.h>
#define LONG 100
int len;
unsigned getbits(unsigned x,int n,int p)
{
return (x >> (p + 1 - n)) & ~(~0 << n);
}
int czytajBin()
{
char tekst[LONG];
int i,wynik,potega,dlugosc;
printf("podaj:\n");
scanf("%[0-1]",&tekst);
wynik = 0;
dlugosc = 0;
for(i=0; i<LONG; i++)
{
if ( tekst[i]=='1' || tekst[i]=='0' ) dlugosc ++;
}
len = dlugosc;
for(i=0; i<dlugosc; i++)
{
if ( i==0 ) potega=1;
if ( i==1 ) potega=2;
if ( tekst[dlugosc-i-1]=='1' ) wynik+=potega;
if ( tekst[dlugosc-i-1]!='1' && tekst[dlugosc-i-1]!='0' ) break;
potega = potega * 2;
}
return wynik;
}
void drukujBin(unsigned a,int len)
{
int i;
char liczba[LONG];
for (i=0; i<LONG; i++)
{
liczba[i]='0';
}
i=0;
if (a == 0) liczba[0]='0';
else while ( a > 0)
{
liczba[i] = ( a % 2 == 0) ? '0' : '1';
a = a/2;
i++;
}
printf("Po przesunieciu:\n");
for (i=len-1; i>=0; i--)
{
printf("%c",liczba[i]);
}
printf("\n\n");
}
main()
{
int x,y;
x = czytajBin();
y = getbits( x , 5 , 9 );
drukujBin( y , len );
}