Grimnar_ Skrevet 15. november 2006 Skrevet 15. november 2006 Hei! Jeg sliter litt med en oppgave jeg har fått. Skal skrive ut bit, men jeg får bare bitene til å komme i feil rekkefølge. Brukeren skrive inn en int input som jeg skal skrive ut binært. char *Binary::msbLeft() { char* bitL = new char; for(int i = 0; i < 16; i++) { if(((input >> i) & 1) == 1) // det er denne saken jeg vil forandre { bitL[i] = '1'; } else { bitL[i] = '0'; } bitL[16] = '\0'; } return (bitL); } Hjelp hadde vært
Shell Skrevet 15. november 2006 Skrevet 15. november 2006 (endret) Hva med denne: char* Binary::msbLeft() { char* bitL = new char[17]; for ( int i = 15; i >= 0; i-- ) bitL[i] = '0' + ( ( input & 1 << i ) != 0 ? 1 : 0 ); bitL[16] = '\0'; return (bitL); } Ok, du vil vel ha msb til venstre i stringen? fra 15 til 0 istedenfor 0 til 15 da tror jeg. Endret 15. november 2006 av Shell
Grimnar_ Skrevet 15. november 2006 Forfatter Skrevet 15. november 2006 Det er det som er problemet ja... jeg får msb til høyre selv om jeg bytter tellerettning
extr Skrevet 15. november 2006 Skrevet 15. november 2006 (endret) Tja, kan gjøres slik: void int_to_binary(int i) { if(i == 1 || i == 0) cout << i; else { int_to_binary(i / 2); cout << i % 2; } } Men det blir kanskje ikke riktig å gjøre det slik i ditt tilfelle? Hmm, denne har jeg ikke sett før Shell, hva skjer her? ( ( input & 1 << i ) != 0 ? 1 : 0 ) input & 1 << i ? Endret 15. november 2006 av extr
Shell Skrevet 15. november 2006 Skrevet 15. november 2006 (endret) edit: ok, denne funker fint og ser bedre ut enn den jeg laget over: char* Binary::msbLeft() { char* bitL = new char[17]; for ( int i = 0; i < 16; i++ ) bitL[i] = '0' + ( input >> 15-i & 1 ); bitL[16] = '\0'; return (bitL); } Hmm, denne har jeg ikke sett før Shell, hva skjer her? ( ( input & 1 << i ) != 0 ? 1 : 0 ) input & 1 << i ? 7291931[/snapback] Tror den er riktig, du kan også skrive den slik: #define BIT( num ) ( 1 << num ) ( ( input & BIT( i ) ) != 0 ? 1 : 0 ) Vil returnere 1 om BIT( x ) er satt i input, ellers 0. Men litt slitsomt å gjøre det slik fant jeg ut (se løsning over i samme post). Endret 15. november 2006 av Shell
Grimnar_ Skrevet 15. november 2006 Forfatter Skrevet 15. november 2006 takker så mye Shell... det hjalp veldig mye.
Orjanp Skrevet 16. november 2006 Skrevet 16. november 2006 Her er en ferdig iota funksjon. Den fungerer veldig fint. Ørjan...
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå