1つだけ過去を変えられるとしたら?

PHPでビット演算をしていますが、
PHPでたとえば、
c = a >> b
でビット演算した値と、
C#で演算した値と

aの値を大きくした場合、
4000000000以上?

は結果が違ってきます。

C#とPHPではビット演算のアルゴリズムが違うのでしょうか?

よろしくお願いします。

A 回答 (2件)

単純に、値のバイト数が違うからじゃないでしょうか。



phpでは、整数リテラルは一般に32ビットです。が、C#の場合、整数リテラルは、int、uint、long、ulong のうち、その値を表すことができる最初の型になります。従って、32ビットで収まりきれない整数リテラルは自動的に64ビットのlongとして内部的に扱われます。

このため、32ビットで収まりきれない整数リテラルを使ったとき、内部的なバイト数が違うためにビット演算した結果が違ってくるんじゃないでしょうか。

この回答への補足

ありがとうございます。

ちなみにこれをC#で同じように求めるには、
C#でどのようコーディングしたらいいのでしょうか?

よろしくお願いします。

補足日時:2007/09/11 08:53
    • good
    • 0

> は結果が違ってきます。



どんな数値で演算を行なったときに
どんな風に結果が異なるかを
PHPとC#の双方について
具体的に示していただけますか?

この回答への補足

失礼致しました。

ソースコード
1000000000 >> 12;
1000000000 >> 13;
10000000000 >> 12;
10000000000 >> 13;

C#の場合
244140
122070
2441406
1220703

PHPの場合
244140
122070
344254
172127

となってしまいます。

10000000000以上だと、値が違ってきてしまいます。。。

補足日時:2007/09/10 15:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報