4

PHP アルゴリズムを perl に移植しようとしていますが、慣れていない 1 ビット演算子に苦労しています...

したがって、php コードは次のようになります。

...
$var = '348492634';
print ~$var;
...

結果: -348492635

perl でまったく同じことを行う:

...
$var = '348492634';
print ~$var;
...

結果: 18446744073361058981

CPUのアーキテクチャに応じた整数サイズについてよく読みましたが、実際の解決策は見つかりませんでした。多分私はperlで間違った関数を使用しています...

ロジックが php スクリプトと同じ結果を得ることが必要です。

前もって感謝します

4

3 に答える 3

2

あなたのセットアップでは、PHP int は 32 ビット署名されていますが、perl int は 64 ビット署名されていないようです。

これはおそらく、指定されたシステムで必要なことを実行しますが、perl の別のインストールで使用した場合、同じように動作することは保証されません。

$var = '348492634'; #hex!
print ~($var - 2**32) - 2**32;
于 2013-10-31T21:58:01.187 に答える
0

迅速で汚い変換は次のとおりです。

print -($var+1);    # like ~$var in PHP

perl が 64 ビット整数を使用している場合、これは$var=-18446744073709551616 ( 0x8000000000000000) に対してのみ失敗します。これは、とにかく 32 ビット PHP では使用しない値です。

于 2013-10-31T22:14:14.480 に答える