Adott egy 129 elemű tömb, tömbfeltöltés: 1. eleme: 0x33, további elemek oszthatók 3-al és 5-el. Hány olyan elem van amelynek a 3-ik és 4-ik bit-jén 1-es található? Hány darab elem van a tömbben amely az ASCI kód tábla értékével azonos értékű?
eddig jutottam:
int main()
{
int t[129],i=0;
t[0]=0x33;
int szam=0x33,bitdb=0,ascidb=0;
while(i<129)
{
t[i]=szam;
if((szam%15)==0)
{
if((t[i]=0b00110000)==0b00110000) //bitmaszkolás
{
bitdb++;
}
if(szam<127) // ASCI tábla 127-ig van
{
ascidb++;
}
i++;
}
szam++;
}
return 0;
}
0x33 az 51, a kérdésem az hogyan lehetne megoldani hogy debuggolás-nál a tömb kezdő értéke ez legyen és ne 60 ami osztható 15-el, valamint jó-e így ilyen formában a bitmaszkolás és hogyan kivitelezhető hogy a debug ablakban egyszerre látszódjanak a tömb elemei,a bitdb és az ascidb?
1. A C++ nem ismeri a 0b... alakú literálokat. Max a te fordítód tartalmaz egy ilyen kiegészítést.
2. A biteket jobbról számoljuk (függ a platformtól, de most itt jobbról) és többnyire 0-tól indexeljük, tehát a 3. bit egy bájtban a 00001000 és nem a 00010000. Itt persze a 3. és 4. bit meg fog egyezni, függetlenül attól, hogy merről nézzük.
3. Ez mi?
if((t[i]=0b00110000)==0b00110000)
Értékül adja t[i]-nek X-t, aztán összehasonlítja X-szel. Ez mikor lesz nem igaz? Bitenkénti összehasonlításra a bitműveletek valók: &, |, ^.
közbe rájöttem a hibáimra:
i-nek eleve rossz kezdőértéket adtam, 1-től kell indítani mivel a 0-ik elemet ugye már meghatároztam
a maszkolást itt valüóban elírtam:
if((t[i]&0b00011000)==0b00011000) ez a helyes
Ez nem C++, hanem C, a 0b az jelenti hogy binárisan adtam meg.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!