C# kod
hddData.Data[5] är en Byte med värdet 1
MessageBox.Show((hddData.Data[5] << .ToString());
resultatet blir 256
VB.NET kod
hddData.Data(5) är en Byte med värdet 1
MsgBox((hddData.Data(5) << .ToString)
resultatet blir 1
Fattar inte varför det blir olika. Trodde << var samma i c# och vb.net "Binary Left Shift Operator"
olika resultat i C# och VB.net
Re: olika resultat i C# och VB.net
Resultatet av din bitshift blir i C#-fallet en implicit int.
Testa t.ex. följande:
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.
Testa t.ex. följande:
Kod: Markera allt
byte b = 1;
var x = b<<8;
Console.WriteLine(x.GetType().FullName);
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
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"
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"