5 svar
348 visningar
magin99 54
Postad: 18 nov 2017 20:04

Hur fungerar static cast?

skriver jag char test = static_cast<char> ('a' + 'b' );

så verkar static_cast titta på ASCII värderna på a och b lägga ihop dem och lägga resultatet  i test

men varför gör den denna då static_cast är <char> borde den inte vara av typen int?

Stokastisk 3597 – Fd. Medlem
Postad: 18 nov 2017 20:19

När du adderar två chars så kommer dessa konverteras till int innan. Så resultatet av 'a' + 'b' är av typen int, men du vill spara ner det i en av typen char. Därför gör du en static_cast till typen char.

Smaragdalena 80504 – Avstängd
Postad: 2 dec 2017 17:07 Redigerad: 2 dec 2017 17:07

1 tramsinlägg raderat. /moderator

PeterÅ 842
Postad: 10 dec 2017 16:52
Stokastisk skrev :

När du adderar två chars så kommer dessa konverteras till int innan. Så resultatet av 'a' + 'b' är av typen int, men du vill spara ner det i en av typen char. Därför gör du en static_cast till typen char.

Observera att du nu har talat om för kompilatorn att det handlar om 8 bitar (char). I ditt exempel kommer 'a' + 'b'  bli 0x61 + 0x62 (97 + 98) = 0xc3 = 195. Svaret ryms inom 8 bitar. Om resultatet blir större än 255 ryms det inte inom char och det blir "overflow" Förstår du?

Stokastisk 3597 – Fd. Medlem
Postad: 10 dec 2017 16:54
PeterÅ skrev :

Observera att du nu har talat om för kompilatorn att det handlar om 8 bitar (char). I ditt exempel kommer 'a' + 'b'  bli 0x61 + 0x62 (97 + 98) = 0xc3 = 195. Svaret ryms inom 8 bitar. Om resultatet blir större än 255 ryms det inte inom char och det blir "overflow" Förstår du?

Om jag förstår? Mitt exempel? Tänkte du citera magin99 nu, men citerade mig av misstag?

PeterÅ 842
Postad: 10 dec 2017 17:09 Redigerad: 10 dec 2017 17:11
Stokastisk skrev :
PeterÅ skrev :

Observera att du nu har talat om för kompilatorn att det handlar om 8 bitar (char). I ditt exempel kommer 'a' + 'b'  bli 0x61 + 0x62 (97 + 98) = 0xc3 = 195. Svaret ryms inom 8 bitar. Om resultatet blir större än 255 ryms det inte inom char och det blir "overflow" Förstår du?

Om jag förstår? Mitt exempel? Tänkte du citera magin99 nu, men citerade mig av misstag?

Ja, det gjorde jag. Ber om ursäkt. Detta forum är märkt av latprogrammering. Otroligt svårt och blir klumpigt att få fram sitt budskap på ett tydligt sätt. Tips till programmerarna: Kolla in Maringuiden. Där kan man markera valda delar av ett inlägg och citera.

Svara
Close