FC2ブログ

PHPの整数同士の割り算

PHPの整数同士の割り算で少しはまってしまいました。
ある整数を32個ずつの区間に分けて、そのsegmentとoffsetを計算しようとして


$segment = ($seqno-1)/32;
$offset = ($seqno-1)%32;
$index = $segment*(8+1);


のようにして計算しました。
$seqnoは整数で、$indexはそのsegmentがおかれるアドレスを計算したつもりです。
ところが、$seqno=64のときに $segment = 1になるのですが(printすると表面上そう見えた)
$indexを計算すると9になるはずが、17になってしまいます。
まさか、PHPが計算ミスするはずがないと、悩んでいましたら、
PHPでは整数同士の割り算でも、端数がでると、小数まで計算してしまうんですね。。。

したがって、正しくは


$segment = (int)(($seqno-1)/32);
$offset = (int)(($seqno-1)%32);
$index = $segment*(8+1);


のようにintにキャストしてやらないといけないわけです。
いつもCやC++で書いていると、整数同士の演算は整数になるに決まっていて
それを利用したコードも書いたりするので、
PHPで整数同士の演算で小数になることがあるというのは、
いつもわすれてしまうんですよね。。

スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

chattera.net

Author:chattera.net
フリーでソフト開発の仕事をしています。
自作したこのチャットシステムは、何か世の中に役に立つこともあるかと思いますので、お呼びがかかるとうれしいですね。

連絡先は chatteranet@gmail.com です。

また、ソフト開発関連のお誘いもうけたまわっております。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR