Sida 1 av 1

olika resultat i C# och VB.net

Postat: 30 september 2019, 22:09:20
av gripner
C# kod
hddData.Data[5] är en Byte med värdet 1
MessageBox.Show((hddData.Data[5] << 8).ToString());
resultatet blir 256


VB.NET kod
hddData.Data(5) är en Byte med värdet 1
MsgBox((hddData.Data(5) << 8).ToString)
resultatet blir 1

Fattar inte varför det blir olika. Trodde << var samma i c# och vb.net "Binary Left Shift Operator"

Re: olika resultat i C# och VB.net

Postat: 30 september 2019, 22:26:53
av gripner

Re: olika resultat i C# och VB.net

Postat: 30 september 2019, 22:31:16
av johano
Resultatet av din bitshift blir i C#-fallet en implicit int.

Testa t.ex. följande:

Kod: Markera allt

byte b = 1;
var x = b<<8;
		
Console.WriteLine(x.GetType().FullName);
och se vad den tycker att 'x' blir för datatyp

I VB-fallet så blir resultatet av operationen << alltid samma datatyp som det värde du skickar in.
Och för att det inte ska flöda över så kommer VB AND-maska bort allt som överstiger den datatyp du skickar in.
I fallet Byte så är masken såklart 7 och 8 AND:at med 7 blir 0.

Din operationen blir då i VB-fallet 1<<0 vilket såklart resulterar i 1.

Re: olika resultat i C# och VB.net

Postat: 30 september 2019, 22:33:05
av gripner
länken jag postade, har all information

C# gör ej en shift på Byte, utan konverterar en byte till int.

så "fixen" i VB.NET är att köra en CInt(min byte) << 8

är väll inte fix då det inte är något fel, i mitt fall var jag ute efter C# "resultatet"