olika resultat i C# och VB.net

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
gripner
Inlägg: 1167
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

olika resultat i C# och VB.net

Inlägg 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"
gripner
Inlägg: 1167
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Re: olika resultat i C# och VB.net

Inlägg av gripner »

johano
Inlägg: 1942
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: olika resultat i C# och VB.net

Inlägg 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.
gripner
Inlägg: 1167
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Re: olika resultat i C# och VB.net

Inlägg 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"
Skriv svar