Pereiti prie turinio

C++ reikia, kad paaiškintumėte sintaksę


Rekomenduojami pranešimai

Visada stebejausi, kai 5min googliniai klausimai uzdavinejami forumuose.. Bet kai ir atsakymai pareina ne i tema, tai isvis..

 

& ir | yra taip vadinami bitwise-and ir bitwise-or. Tai reiskia, kad jie dvi skaitines reiksmes sulieja kiekvienai ju bitu porai pritaikydama AND arba OR operacija, pvz dvejetainej israiskoj tai veikia taip: 1101 & 1011 == 1001 ir 1101 | 1011 == 1111.

 

&& ir || yra loginiai AND ir OR, apie kuriuos kalba auksciau rasiusieji. Skirtumas? & ir | rezultatas yra operandu tipo (pvz. int, short ir pan.), o && ir || rezultatas yra true arba false. Siokia tokia maisatis atsiranda, kadangi C/C++ leidzia skaitine reiksme naudoti kaip logine, t.y. "if (5)" tolygu "if (true)", bet vykdant matematinius veiksmus skirtumas akivaizdus.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tik dar reikia paminėti, kad & ir | skiriasi nuo && ir ||. && ir || atlieka operacijas su loginiais kintamaisiais, t.y. TRUE ir FALSE. Tuo tarpu & ir | atlieka operacijas su bitais. Bandysiu kažkiek paaiškinti.

 

Tarkim, imkim kintamuosius

short a = 3;
short b = 8;

Paprastumo dėlei tarkime, kad short ilgis yra 1 baitas = 8 bitai. Todėl kompiuteryje jie saugomi tokiu pavidalu:

310 = 000000112

810 = 000010002

 

Dabar atlikime tokias operacijas:

a && b //rezultatas TRUE
a || b //rezultatas TRUE
a & b //rezultatas 00000000
a | b //rezultatas 00001011

 

Kaip sakiau, && ir || dirba su loginiais kintamaisiais. Kadangi kompiuteris viską, kas ne 0, supranta kaip TRUE, todėl a ≡ TRUE ir b ≡ TRUE. Loginės operacijos && ir || grąžina TRUE.

 

Tuo tarpu & ir | dirba su bitais. Tai reiškia, kad atliekant operaciją su dviem skaičiais, pereinama per kiekvieną bitą ir atliekama AND arba OR operacija.

 

00000011
&
00001000
=
00000000

 

0 AND 0 = 0, 0 AND 1 = 0, 1 AND 1 = 1. Kadangi 5, 7 ir 8 pozicijose yra 0 AND 1 = 0, kitur 0 AND 0 = 0, tai rezultatas 00000000.

 

00000011
|
00001000
=
00001011

 

Kadangi OR grąžina vienetą, kai bent vienas iš kintamųjų yra vienetas, tai grąžinamas vienetas. Todėl toks rezultatas.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dar iš bitwise operatorių yra XOR(^), NOT arba Unary operation(~) bei left-shift(<<) ir right-shift(>>).

 

XOR(^):

 

0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

 

NOT(~):

 

~0 = 1
~1 = 0

 

Left-shift(<<):

 

Pvz.:

 

00001110011010 << 4 (pastumiam per 4 bitus į kairę) == 11100110100000

 

Right-shift(>>):

 

00001110011010 >> 4 (pastumiam per 4 bitus į dešinę) == 00000000111001

Redagavo facis1
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bendram išprusimui:

Dažnai << ir >> operatoriai yra overloadinami. Pirmasis naudojamas rašymui į failą: cout << "čia yra stringas"; myFile << myObject, o antrasis skaitymui: cin >> someVar; myFile >> myObject.

 

http://www.learncpp.com/cpp-tutorial/91-introduction-to-operator-overloading/

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...