15. december 2005 - 13:30Der er
7 kommentarer og 1 løsning
AND en ASKKI-værdi ind på hver plads i array
Jeg skal lave en funktion der generere én random karakter 100.000 gange.
Hver karakter angives som en ASKII-værdi i hex, og så skal den enkelte bit fra ASKII-værdien lægges ind bitvis i et array[8] som enten nul eller et, således at alle 8 bit fra ASKII-værdi til sidst lægger i char-arrayet[8] som enten et eller nul.
Koden ser fin ud, men af en eller anden grund bliver jeg ved med at havne i else-delen af min if-else statement. Kan du finde fejlen ved koden?
void gen_char() { int i,j; char x = 0x20; //x er ASKII-værdien char y = 0x00; char mask = 0x01;// for(i=0; i<100000; i++) { x = x++; for(j=0; j<8; j++) { y = (x && mask); if (y == 0x00)//hvis y nul, ikke fundet bit { cha[j] = 0x00; } else { cha[j] = 0x01; } mask = mask*2; //bit i mask flyttes én plads y = 0x00; } mask = 0x01; if (x == 0x7e) { x=0x20; } y2(cha,G,result); } }
Jeg har faktisk prøvet med y=(x & mask) men da det heller ikke virkede, så gik jeg over til &&, da jeg var lidt i tvivl om syntaksen. Så ja du har ret brilleaben, det skal være y=(x & mask).
Imidlertid var det ikke det der fik programmet til at fejle. Fejlen var x = x++. Da x er erklæret som en char kan åbenbart ikke lave x++ syntaks, man skal skrive x=x+1 for at det kommer til at fungerer rigtigt. Det opdagede jeg efter jeg havde uploadet spørgsmålet, men tak for hjælpen skal du have.
og det virker heller ikke med kun én &. Imidlertid har jeg selv fun
Det er faktisk forkert. ++var er pre-increment var++ er post-increment
Mit gæt er, at der oprettes en midlertidig variabel til x på stack'en, idet du jo ikke kan tildele noget med den selv. Og da var++ er post-increment, så vil variablen på stack'en (som jo slettes igen uden for det nuværende scope) først blive hævet med 1 , efter dens værdi er blevet tildelt x.
Kort sagt står der: (hvor x1 er den nye variabel på stack'en) x1 = x; x = x1; x1++;
Så hvis den kommando skal virke, som du vil have den til, er der nødt til at stå: x = x++;
x = x++ giver "undefined behaviour" uanset typen af x. Det gør det fordi man modificerer det samme object to gange unden et "sequence point".
At det er "undefined behaviour" betyder at én kompiler kan give et resultat og en anden et andet resultat. Af de fire c++ kompilere jeg har pt. skriver de to 12 og de to andre 13 når de kompilerer nedenstående:
#include <iostream>
int main() { int x = 12; x = x++; std::cout << x << std::endl; }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.