Gå til innhold

c++ forskjellen på "<<" og "+"


Anbefalte innlegg

Skrevet

leser accelerated c++ nå, er helt sikkert bare jeg som er litt treg og ikke forstår.

men hva konkret er forskjellen?

std::cout << "hello " + name + "!" << std::endl;

 

har prøvd og bytte ut << med + , og omvendt og mye forskjellige funker.

Videoannonse
Annonse
Skrevet

Hvis du velger et annet eksempel forstår du forskjellen mye lettere.

 

int i;

i = i << 1; // det samme som int i = i*2;

i = i + 2; // det samme som.. vel.. i = i+2;

 

 

Når det gjelder strenger så fungerer begge deler likt ut fra hva man ser på skjermen.

 

std::cout << "hello " + name + "!";

Her limes først "hello ", innholdet i name og "!" sammen til én streng. Så printes hele strengen deretter.

 

std::cout << "hello " << name << "!";

Her printes først "hello ", så innholdet i name, og så "!".

Skrevet
Hvis du velger et annet eksempel forstår du forskjellen mye lettere.

 

int i;

i = i << 1; // det samme som int i = i*2;

i = i + 2; // det samme som.. vel.. i = i+2;

 

 

Når det gjelder strenger så fungerer begge deler likt ut fra hva man ser på skjermen.

 

std::cout << "hello " + name + "!";

Her limes først "hello ", innholdet i name og "!" sammen til én streng. Så printes hele strengen deretter.

 

std::cout << "hello " << name << "!";

Her printes først "hello ", så innholdet i name, og så "!".

ok, takk, har ikke kommet så langt at at jeg vet hva int i; er da :p men takk uansett, for stod det bedre nå :)

Skrevet
leser accelerated c++ nå, er helt sikkert bare jeg som er litt treg og ikke forstår.

men hva konkret er forskjellen?

std::cout << "hello " + name + "!" << std::endl;

 

har prøvd og bytte ut << med + , og omvendt og mye forskjellige funker.

Uten at jeg skal si det for sikkert, tror jeg cout-funksjonen støtter << og + likt.

 

Men på generelt grunnlag, betyr + at to verdier legges sammen helt matematisk. Men << betyr at selve "bitene" (av engelsk: bits) tallet er gjort opp av flyttes én plass til venstre.

 

Så hvis variabelen Tall er 5 (binært 0101), og du skriver Tall = Tall << 1;, betyr det at bitene flyttes én plass til venstre og dermed blir 10 (binært 1010). Den "nye plassen" til høyre vil da alltid være 0.

 

Forøvrig fungerer >> på samme måte, at bitene flyttes n antall plasser mot høyre. Med andre ord vil Tall = Tall >> 2; flytte bitene 2 plasser mot høyre.

Skrevet
leser accelerated c++ nå, er helt sikkert bare jeg som er litt treg og ikke forstår.

men hva konkret er forskjellen?

std::cout << "hello " + name + "!" << std::endl;

 

har prøvd og bytte ut << med + , og omvendt og mye forskjellige funker.

Uten at jeg skal si det for sikkert, tror jeg cout-funksjonen støtter << og + likt.

 

(snip)

 

Zethyr har rett i sin forklaring.

std::cout << "hello " + name + "!" << std::endl; blir behandlet som std::cout << ("hello " + name + "!") << std::endl; std::cout er en ostream klasse som bare har operatoren << og noen funksjoner.

Skrevet (endret)
Zethyr har rett i sin forklaring.

std::cout << "hello " + name + "!" << std::endl; blir behandlet som std::cout << ("hello " + name + "!") << std::endl; std::cout er en ostream klasse som bare har operatoren << og noen funksjoner.

Du har sikkert helt rett! Jeg burde vel strengt tatt egentlig ikke uttalt meg om den cout-funksjonen, siden jeg ikke har så god greie på den. :)

 

Men jeg reagerte på at det ble sagt at i = i << 1 er det samme som i = i * 2. << og >> har ikke noe med multiplikasjon som sådan å gjøre, men å flyte biter mot venstre eller høyre.

Endret av Bassmus
Skrevet
Men jeg reagerte på at det ble sagt at i = i << 1 er det samme som i = i * 2. << og >> har ikke noe med multiplikasjon som sådan å gjøre, men å flyte biter mot venstre eller høyre.
I totalls-systemet vil det si det samme å flytte bitene 1 hakk til venstre, som å multiplisere med 2.

 

Dersom compileren ikke optimaliserte multiplikasjonene ville det dog gå raskere å bitshifte til venstre enn å multiplisere med en toerpotens (på noen prosessorer).

Skrevet

int står for "integer" og betyr heltalls-variabel. Når jeg skriver int a = 2; så sier jeg at jeg har en heltallsvariabel som heter a, og som nå for tiden inneholder tallet 2.

 

Men jeg skal gi deg et tips: Du bør nok lese noen sider i ei c++-bok hvis du skal lære noe særlig effektivt ;)

Skrevet

Er det noen gratis online bøker da?

Fordi jeg bare leker litt med c++ av og til og har ikke tenk å gå så veldig dypt inn i det siden jeg allerede programerer et annet språk...

 

Men hvordan kan jeg lage en variabel som inneholder en streng (string) da?

Skrevet
Er det noen gratis online bøker da?

Fordi jeg bare leker litt med c++ av og til og har ikke tenk å gå så veldig dypt inn i det siden jeg allerede programerer et annet språk...

 

Du kan jo starte med denne.

C++ Language Tutorial

 

 

Men hvordan kan jeg lage en variabel som inneholder en streng (string) da?

 

#include <string>

 

std::string text = "hei dette er en tekststreng";

Skrevet (endret)

Skal prøve på en litt nøye forklaring:

 

+ og << er operatorer. Operatorer er egentlig funksjoner. F.eks. kunne + vært add(a,b). I C++ kan operatorer(som andre funksjoner) overlagres. I standardbiblioteket har mange klasser overlagret operatorer på en hensiktsmessig måte(string er en klasse og cout er et objekt av type/klasse ostream).

 

Operatorer har en viss presedens, dvs. i hvilken rekkefølge de utføres. F.eks. utføres

a + b * c

slik:

a + (b * c)

 

De fleste operatorer assosierer fra venstre mot høyre, dvs

a + b + c

utføres slik:

(a + b) + c

 

+ har høyere presedens enn <<, så:

cout << "hello " + name + "!" << endl;

blir slik

cout << ("hello " + name + "!") << endl;

->

cout << (("hello " + name) + "!") << endl;

 

+ operatoren har omtrent slik deklarasjon(muligens brukes referanser):

 

string operator+(string a, string b);

 

dvs. +-funksjonen tar inn to strenger og returnerer en streng(de to strengene konkatenert).

funksjonen/operatoren kjøres to ganger i uttrykket

(("hello " + name) + "!")

 

man står da igjen med(total == ("hello " + name) + "!"):

cout << total << endl;

->

(cout << total) << endl;

 

Klassen ostream(som cout er) har overlagret << omtrent slik:

 

ostream &operator+(string s);

 

dvs. funksjonen gjør noe med strengen på høyre side og returnerer en referanse. Det noe den gjør er i dette tilfellet å skrive til stdout. Referansen den returnerer er til seg selv. Poenget med det er at man slipper å skrive:

cout << total;

cout << endl;

 

Håper dette var riktig:)

Endret av JeffK

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...