login  Naam:   Wachtwoord: 
Registreer je!
 Forum
Zoeken  Regels  Help
Categorieën > Csharp.NET

[C#.NET] Byte vs integer (Opgelost)

Joel – 30/12/2007 15:01 (Laatst gewijzigd op 30/12/2007 15:03)
Hoi

Als ik het volgende uitvoer:
  1. byte i = 5;
  2. byte j = 7;
  3. Console.WriteLine((i * j).GetType());


krijg ik als uitvoer "System.Int32".

Ook bij optellen of aftrekken, wordt het type int32.

  1. byte i = 5;
  2. byte j = 7;
  3. byte k = i * j;


Deze code geeft dus een foutmelding:
Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?)

Weet iemand waarom je het type byte niet kunt behouden bij een vermenigvuldiging van twee bytes?


Pagina:

12 antwoorden

Gesponsorde links

jerone – 30/12/2007 17:06
Ik geloof dit het moet zijn:
  1. byte k = (byte)(i * j);


Godlord – 30/12/2007 18:06
Hoeveel is 255 * 255 dan? Dat past niet in een byte. Daarvoor heb je een short of int16 nodig.

Joel – 30/12/2007 19:11
dus dan moet int * int ook long worden zoals jij het beschrijft en dat is niet.

titjes – 30/12/2007 20:39
Zoals jerone al zei moet het. De bewerking van twee bytes geeft als resultaat een integer. Je moet dus het resultaat casten naar een byte, het resultaat mag dan wel niet groter zijn dan 255 natuurlijk. Voorbeeld:
  1. byte result;
  2. byte x = 5;
  3. byte y = 7;
  4. result = (byte)(x * y);
  5. //geldt ook voor andere bewerkingen
  6. //je kan ook met statische getallen werken
  7. result = (byte)(9 + 4);
  8. //je kan ook bijvoorbeeld doubles omzetten
  9. //naar bytes door middel van deze casting
  10. result = (byte)7.0;


Hopelijk een volledige en duidelijke uitleg! 

Joel – 30/12/2007 23:18
Misschien heb ik m'n vraag niet duidelijk gesteld. Je zei dus:

De bewerking van twee bytes geeft als resultaat een integer.

Hoe komt dit ? 

titjes – 30/12/2007 23:45 (Laatst gewijzigd op 30/12/2007 23:45)
Is op zich het probleem opgelost? 
Dat is net hetzelfde als je een integer deelt door een integer en het resultaat is geen geheel getal:
  1. double result;
  2. int x = 5;
  3. int y = 3;
  4. result = x / y;
  5. //result kan/mag geen integer zijn
  6. //ook bij vermenigvuldigen is dit hetzelfde
  7. //vrij logisch toch?!


Godlord – 31/12/2007 03:26
Joël schreef:
dus dan moet int * int ook long worden zoals jij het beschrijft en dat is niet.


Fout. Int is op Windows 32-bit standaard een int32. Dit is dus duidelijk een long. Op 64-bit is dit zelfs een int64 dat is een variant of in C++ een long long. Dit wordt nog niet door alle compilers geondersteund maar het bestaat wel. Omdat int32 * int32 een int64 kan zijn wordt dit nog behandeld als een long omdat int64 niet standaard geondersteund wordt door sommige compilers, daarbij kan dit niet echt standaard zijn op de 32-bit versie van een besturingssysteem. Alhoewel het bestaat en ook wel eens gebruikt wordt. Wat jij dacht was zeker dat int16 een int was. Dat zou enkel van toepassing zijn op een 16-bit besturingssysteem. int16 * int16 kan een long of een int(32) vereisen.

Joel – 31/12/2007 16:03
Titjes, ik had geen probleem, ik wou gewoon de theorie weten hoedat het komt dat een bewerking met twee bytes een integer wordt, ook al doe je byte 5 - byte 3.

Dus de compiler rekent met de geheugenruimte die voor elk type wordt vrijgegeven, dus twee bytes werkt met 2 keer 1 byte en heb je dus een type nodig van min 2 byte en daar nemen ze int32 voor. Maar waarom dan geen short?

De reden waarom ik dit wil weten, is omdat ik een vak "programeertechhieken" heb en die leerstof gaat over zulke dingen maar ze leggen niet goed uit hoe het komt, ze vragen ergens waarom je een fout krijgt als je twee bytes vermenigvuldigt zonder het naar INT te casten.

rambo – 31/12/2007 19:07
Omdat 255 * 255 > de waarde die een (signed) short kan bevatten. Mijn vermoeden is, als je het resultaat naar een unsigned short cast, dat je resultaat wel als short-type gebruikt wordt.

MFdriver – 31/12/2007 19:36
Joël schreef:
Titjes, ik had geen probleem, ik wou gewoon de theorie weten hoedat het komt dat een bewerking met twee bytes een integer wordt, ook al doe je byte 5 - byte 3.

Dus de compiler rekent met de geheugenruimte die voor elk type wordt vrijgegeven, dus twee bytes werkt met 2 keer 1 byte en heb je dus een type nodig van min 2 byte en daar nemen ze int32 voor. Maar waarom dan geen short?

De reden waarom ik dit wil weten, is omdat ik een vak "programeertechhieken" heb en die leerstof gaat over zulke dingen maar ze leggen niet goed uit hoe het komt, ze vragen ergens waarom je een fout krijgt als je twee bytes vermenigvuldigt zonder het naar INT te casten.

waar zit je wel op school misschien?
en rambo is trouwens juist 

Gesponsorde links


Pagina:

Dit onderwerp is gesloten.
Actieve forumberichten:

© 2002-2012 Sitemasters.be - Regels - Gehost door: Vircon - Laadtijd: 0.065s