Gå til innhold

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


Anbefalte innlegg

Videoannonse
Annonse

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å "!".

Lenke til kommentar
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å :)

Lenke til kommentar
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.

Lenke til kommentar
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.

Lenke til kommentar
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
Lenke til kommentar
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).

Lenke til kommentar

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 ;)

Lenke til kommentar
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";

Lenke til kommentar

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
Lenke til kommentar

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...