Hej med Jer.
Jeg sidder roder med bits. Jeg skal finde et udtryk/algoritme, der kan
følgende:
bits er et tal i intervallet [0;32]
Hvis bits er 1, tændes bit 32.
Hvis bits er 2, tændes bit 32 og 31.
Hvis bits er 3, tændes bit 32 og 31 og 30.
o.s.v.
For bits = 0, er ingen bits tændt.
For bits = 32, er alle bits tændt.
Kan nogen hjælpe?
Jeg har lavet et lille program til at teste om udtrykket/algoritmen er
rigtig - resultatet af udtrykket/algoritmen skal tildeles result (ved
kommentaren):
#include <stdio.h>
// her er de korrekte vaerdier for bits [0;32]
unsigned int _fetch [33] = { 0x00000000,
0x80000000, 0xC0000000, 0xE0000000, 0xF0000000, 0xF8000000, 0xFC000000,
0xFE000000,
0xFF000000, 0xFF800000, 0xFFC00000, 0xFFE00000, 0xFFF00000, 0xFFF80000,
0xFFFC0000,
0xFFFE0000, 0xFFFF0000, 0xFFFF8000, 0xFFFFC000, 0xFFFFE000, 0xFFFFF000,
0xFFFFF800,
0xFFFFFC00, 0xFFFFFE00, 0xFFFFFF00, 0xFFFFFF80, 0xFFFFFFC0, 0xFFFFFFE0,
0xFFFFFFF0,
0xFFFFFFF8, 0xFFFFFFFC, 0xFFFFFFFE, 0xFFFFFFFF };
char buf [33] = {0};
char* do_binary ( unsigned int result )
{
int i = 0; while ( i < 32 ) { if ( result & 0x80000000 ) buf [i] = '1'; else
buf [i] = '0'; result <<= 1; i++; };
return &buf [0];
};
int main(int argc, char* argv[])
{
int charcount;
unsigned int result;
bool errors = false;
int bits = 0;
while ( bits < 33 )
{
// lav udregning til result - nedstaaende er et eksempel der ikke virker
result = (0x1 << bits)-1;
printf ( "for %u bits: %u (%08X) - %n", bits, result, result, &charcount );
charcount = 50 - charcount;
while ( charcount-- )
printf ( " " );
printf ( "binary: %s\n", do_binary (result) );
if ( result == _fetch [bits] ) printf ( "Resultatet er korrekt!\n" ); else
{ printf ( "Resultatet er IKKE korrekt\n"); errors = true; };
bits++;
};
printf ( "%s\n", errors ? "Beklager. Den algoritme duer ikke!" : "Tillykke.
Dette er et rigtigt svar." );
return 0;
}