login  Naam:   Wachtwoord: 
Registreer je!
 Forum

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

Offline Joel - 30/12/2007 15:01 (laatste wijziging 30/12/2007 15:03)
Avatar van JoelEigenaar 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?

12 antwoorden

Gesponsorde links
Offline jerone - 30/12/2007 17:06
Avatar van jerone JS gevorderde Ik geloof dit het moet zijn:
  1. byte k = (byte)(i * j);
Offline Godlord - 30/12/2007 18:06
Avatar van Godlord PHP gevorderde Hoeveel is 255 * 255 dan? Dat past niet in een byte. Daarvoor heb je een short of int16 nodig.
Offline Joel - 30/12/2007 19:11
Avatar van Joel Eigenaar dus dan moet int * int ook long worden zoals jij het beschrijft en dat is niet.
Offline Abbas - 30/12/2007 20:39
Avatar van Abbas Gouden medaille

Crew .NET
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! 
Offline Joel - 30/12/2007 23:18
Avatar van Joel Eigenaar 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 ? 
Offline Abbas - 30/12/2007 23:45 (laatste wijziging 30/12/2007 23:45)
Avatar van Abbas Gouden medaille

Crew .NET
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?!
Offline Godlord - 31/12/2007 03:26
Avatar van Godlord PHP gevorderde
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.
Offline Joel - 31/12/2007 16:03
Avatar van Joel Eigenaar 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.
Offline rambo - 31/12/2007 19:07
Avatar van rambo HTML beginner 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.
Offline MFdriver - 31/12/2007 19:36
Avatar van MFdriver PHP interesse
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 
Offline Stijn - 31/12/2007 19:55
Avatar van Stijn PHP expert Het hangt af van compiler tot compiler. De C compiler (gcc) zal geen fout geven bij jou code (als ik dat vertaal naar C code natuurlijk). Het geeft echter een foutief resultaat.

De uitleg van rambo klopt. Wanneer ik er een unsigned van maak doet hij het correct (dit terzijde).

Je compiler denkt gewoon wat vooruit en wil voorkomen dat jij foutieve resultaten zal bereiken. We zullen het nooit weten waarom het is, tenzij Microschoft morgen zijn compilers opensource maakt .
Offline shankrac15 - 23/08/2008 18:44
Avatar van shankrac15 Lid Hi...

Thanks for the information. It was really helpful....

Thanks,
shankrac15@gmail.com
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.201s