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.

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