Schrift
[thread]1568[/thread]

$a >> $b: in perl und php = verschieden? (Seite 2)

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
jan
 2004-07-07 21:56
#15318 #15318
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
mh. aber Math::BigInt bzw. use bigint bringt auch nicht das gewünschte Ergebnis:
Code: (dl )
1
2
3
4
use Math::BigInt;
$x = Math::BigInt->new("4653896912");
$x->brsft("13");
print $x->bstr;

bringt: 568102
aber in php:
Code: (dl )
1
2
3
<?
echo (4653896912 >> 13);
?>

bringt 43814.
any ideas?
esskar
 2004-07-07 22:17
#15319 #15319
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
stimmt schon:

Code: (dl )
1
2
3
unsigned __int64 num = 0x11564D4D0L; #4653896912
unsigned int64 shifted = (num >> 13);
printf("%u\n", shifted); #568102


bzw.

Code: (dl )
1
2
100010101011001001101010011010000 #4653896912
10001010101100100110 #568102


man sieht schön, dass die letzten 13 bytes "verschwunden" sind
:) also\n\n

<!--EDIT|esskar|1089224294-->
jan
 2004-07-07 22:19
#15320 #15320
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
ja, ok, das bedeutet, dass es generell funktioniert; was mir aber am herzen liegt, ist das verhalten von php und bash (und und und, kA, wer das wie macht) zu haben, nicht das korrekte perl-ergebnis, dass aber vom php/bash-ergebnis abweicht....
esskar
 2004-07-07 22:23
#15321 #15321
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
und jetzt seh ich auch wie das ergebnis von php und bash zu stande kommt

Code: (dl )
print ((4653896912 - 4294967296) >> 13);


heißt also, perl arbeitet mit "unsigned" und php und bash wohl mit "signed"
ptk
 2004-07-07 23:46
#15322 #15322
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wenn ich die Sourcen von perl richtig deute, dann versucht perl so lange wie moeglich mit Integern zu arbeiten. Wenn das mit signed nicht moeglich ist, wird als letzte Moeglichkeit unsigned verwendet, anstelle gleich floats zu verwenden. Siehe auch PERL_PRESERVE_IVUV in den Sourcen.
esskar
 2004-07-08 00:54
#15323 #15323
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
das solange nicht minus gerechnet oder eine negative zahl in "benutzt" wird, es immer unsigned ist... vorallem beim überlauf
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2004-07-07 01:26.