A C nyelvben mit jelent a dupla "kacsacsőr"? << / >>
?: feltételes kifejezés, a két karakter köré sorban ezt paszírozod: logikai kifejezés, ha_igaz, ha_hamis, és ez egy _értéket_ ad vissza, nem vezérlő szerkezet
a bitműveletekhez nem ártana ismerni a bináris ábrázolást, anélkül nem megy
Tehát:
A számítógép binárisan dolgozik, legkisebb címezhető egysége a byte, ami ugye 8 bit. Ez 2^8=256 különböző értéket vehet fel (mert ugye 1 bit 0 vagy 1, 2 bit 00,01,10,11, 3 bit 000,001,010,011,100,101,110,111 stb...)
(Remélem kettes számrendszert tudsz tízesbe váltani).
A bitenkénti eltolás az adott bájtot (vagy több byteos változót, mindegy...) eltolja << balra, vagy >> jobbra annyival, amennyit mögé írsz, és a végére/elejére egy 0 bitet ír, az utolsót/elsőt felülírja.
Példa:
01000001 (ez 65 ha átszámolod //char a=65;)
Ha ezt a változót jobbra tolod 1-gyel "a=a>>1;", akkor az leghátsó 1-es "leesik", és a elejére "beszúrsz" egy 0-t. Tehát ez jön ki belőle:
00100000, vagyis 32
Ugyanez a=a<<1; esetén: A legelső nulla leesik, az összes többi "előrébb csúszik", és a végére szúrsz egy 0-t.
Tehát a=a<<1;
10000010 vagyis 130.
Látható, hogy <<1 megegyezik a kettővel való szorzással, a >>1 pedig az (egész) osztással. Ha 2-vel tolnál, 4-gyel szorozna/osztana, ha 3-mal, akkor 8-cal, ha n-nel, akkor 2^n-nel.
Gyorsan tudsz velük számolni.
A bitenkénti vagy:
Veszünk két bytot, és ha bitenként VAGY műveletet végzünk, vagyis az eredmény azon bitje csak akkor lesz 0, ha mindkét bit 0.
Példa:
a bit 10101010
b bit 10010001
Ekkor c=a|b; c=10 10111011, mivel csak a jobbról 3. és 7. bit volt mindkettőben nulla (Az ÉS meg XOR hasonlóan, csak más a "szabály")
A ?: kifejezés pedig egy "rövidített értékadó ifként" képzelhető el. Például:
max=((a>b)?a:b); Ez először megvizsgálja, hogy a nagyobb-e b-nél, ha igen, a lesz a max, ha nem b lesz.
Ugyanaz, mint:
if (a>b) max=a;
else max=b;
Remélem tudtam segíteni.
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!