|
Categorieën >
Csharp.NET
[C#.NET] Byte vs integer (Opgelost)
Joel – 30/12/2007 15:01 (Laatst gewijzigd op 30/12/2007 15:03)
|
|
offline
|
Intern Manager
|
Hoi
Als ik het volgende uitvoer:
byte i = 5;
byte j = 7;
Console.WriteLine((i * j).GetType());
byte i = 5; byte j = 7; Console.WriteLine((i * j).GetType());
krijg ik als uitvoer "System.Int32".
Ook bij optellen of aftrekken, wordt het type int32.
byte i = 5;
byte j = 7;
byte k = i * j;
byte i = 5; byte j = 7; 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
|
|
|
offline
|
JS gevorderde
|
Ik geloof dit het moet zijn:
|
|
|
|
offline
|
PHP gevorderde
|
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
|
|
offline
|
Intern Manager
|
dus dan moet int * int ook long worden zoals jij het beschrijft en dat is niet.
|
|
|
|
offline
|

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:
byte result;
byte x = 5;
byte y = 7;
result = (byte)(x * y);
//geldt ook voor andere bewerkingen
//je kan ook met statische getallen werken
result = (byte)(9 + 4);
//je kan ook bijvoorbeeld doubles omzetten
//naar bytes door middel van deze casting
result = (byte)7.0;
byte result; byte x = 5; byte y = 7; result = (byte)(x * y); //geldt ook voor andere bewerkingen //je kan ook met statische getallen werken result = (byte)(9 + 4); //je kan ook bijvoorbeeld doubles omzetten //naar bytes door middel van deze casting result = (byte)7.0;
Hopelijk een volledige en duidelijke uitleg!
|
Joel – 30/12/2007 23:18
|
|
offline
|
Intern Manager
|
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)
|
|
offline
|

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:
double result;
int x = 5;
int y = 3;
result = x / y;
//result kan/mag geen integer zijn
//ook bij vermenigvuldigen is dit hetzelfde
//vrij logisch toch?!
double result; int x = 5; int y = 3; result = x / y; //result kan/mag geen integer zijn //ook bij vermenigvuldigen is dit hetzelfde //vrij logisch toch?!
|
|
|
|
offline
|
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.
|
Joel – 31/12/2007 16:03
|
|
offline
|
Intern Manager
|
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
|
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
|
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
|
Dit onderwerp is gesloten.
|
|
|