Det er på grund af at (11010000 << 24) = 00000000 Da jeg går udfra, at int i C# er et to-komplement binært tal, så bliver det endelige resultat negativt.
causalty - Så har jeg haft delvist ret i min første post. Grunden til at det bliver negativt er overflow, og dette er pga. at tallene binært repræsenteres som 2-komplement tal. Binært er det helt rigtigt udregnet, men kort fortalt, fordi der er et 1-tal på den 32. plads, så bliver det negativt. Så du skal enten bruge en datatype til resultatet, der bruger mere plads, eller også skal du bruge en unsigned datatype.
Det var 208 som blev shiftet op ikke 63 - i spørgsmålet og i svaret der virkede - jeg foreslog at prøve little endian som shiftede 63 op men det virkede ikke
rasmusbg: det var (byte[3]<< 24) jeg skrev. Altså 11010000 < 24 og det giver overflow :P Men hvorfor virker det så ikke at caste til en long: long sequenzeNumber = (long)((bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]); når arnes trick med uint virker?
ok, jeg har vist fået rodet lidt rundt i mit lille kodeeksempel, - og er vist I øvrigt nået ud i den del af den bitwise-verden hvor jeg ikke kan bunde... pas! ;)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.