Kezdőoldal » Számítástechnika » Programozás » A C nyelvben mit jelent a...

A C nyelvben mit jelent a dupla "kacsacsőr"? << / >>

Figyelt kérdés
És lenne még pár operátorhoz kérdésem: '|' (bitenkénti vagy), '?:' (if,else,while operátor). Mint látjátok, rákerestem, látom, hogy a << >> is bitenkénti eltolás. Számításoknál van jelentősége vagy most ezek mit jelentenek? A ?: pedig kifejezések értékénél zh-ban hogy jöhet elő?

2013. nov. 25. 19:04
 1/5 anonim ***** válasza:

?: 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

2013. nov. 25. 19:58
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:

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.

2013. nov. 26. 12:27
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:
kis pontosítás: eltolásnál implementation-defined a balról bejövő bit, de általában az előjelbit
2013. nov. 26. 12:30
Hasznos számodra ez a válasz?
 4/5 iostream ***** válasza:
Jobbra tolásnál implementációfüggő az ELŐJELES TÍPUSOK esetén, de jellemzően bitbohóckodni tipikusa binárisan érdekes adatokon szoktunk, azok meg legyenek előjel nélküliek by design.
2013. nov. 26. 15:34
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:
Köszönöm a pontosítást, igazatok van.
2013. nov. 26. 20:07
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!