5 svar
204 visningar
magin99 56
Postad: 18 nov 2017

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 3613
Postad: 18 nov 2017

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 Online 33976 – Moderator
Postad: 2 dec 2017 Redigerad: 2 dec 2017

1 tramsinlägg raderat. /moderator

PeterÅ 1053 – Avstängd
Postad: 10 dec 2017
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 3613
Postad: 10 dec 2017
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Å 1053 – Avstängd
Postad: 10 dec 2017 Redigerad: 10 dec 2017
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 Avbryt
Close