SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

突然ですがクイズです!(AD)

突然ですがクイズです!-その2

Delphi、C++、Java、C#、PHP、Rubyの6言語の動作の違いをクイズで考察

  • X ポスト
  • このエントリーをはてなブックマークに追加

Delphi、C++、Java、C#、PHP、Rubyの6言語を取り上げて、プログラミング言語に対する理解を深めるクイズシリーズ第2弾。同じような動作を記述していながら、結果が異なるケースを紹介し、言語ごとの挙動の違いを考察します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 前回のクイズには挑戦していただけましたか?

 コンピュータに向かわずにコードについて考える訓練は、プログラミングのための思考能力を高めるのにも役立ちます。さあ、今回も、Delphi、C++、Java、C#、PHP、Rubyの6言語を取り上げ、同じような動作を記述していながら、結果が異なるケースを紹介し、言語ごとの挙動の違いを考察していきましょう。

前回の記事

最初のクイズ(割り算)

問題

 最初のクイズは割り算に関するものです。6つの言語を使って、きれいに割り切れない割り算「2007÷11÷21」を試してみました。しかし、1つだけ出力結果が違うものがあります。それは、どの言語でしょうか?

Delphi
program Project1;
{$APPTYPE CONSOLE}
begin
  Write(2007 div 11 div 21);
end.
C++
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
  cout << 2007/11/21;
  return 0;
}
Java
package project1;
public class Project1 {
  public static void main(String[] args) {
    System.out.print(2007/11/21);
  }
}
C#
namespace project1 {
public class Project1 {
  public static void Main() {
    System.Console.Write(2007/11/21);
  }
}
}
PHP5
<?php
echo 2007/11/21;
?>
Ruby
print 2007/11/21
解説

 正解は「PHP」。

 PHPでは、期待した「8」は出力されず、少数点「8.6883116883117」が出力されてしまいます。それ以外の言語では正しく「8」が出力されます。これは一体どういうことでしょうか。

 Delphi/C++/Java/C#/Rubyでは結果について特別に意識することはないでしょう。整数同士の割り算の結果、小数点は切り捨てられ、整数値が得られます。しかしPHPでは、整数値同士のであっても割り切れない場合には小数点が返されます。

 少数ではなく整数値「8」を取得したい場合には、intへの明示的なキャストが必要になります。以下に示すようなコードにより、期待した「8」が出力されます。

<?php
echo (int)((int)(2007/11)/21);
?>

次のページ
引き算

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
突然ですがクイズです!連載記事一覧
この記事の著者

EDN編集部(イーディーエヌ編集部)

エンバカデロ・デベロッパーネットワーク(EDN)は、ソフトウェア開発者とデータベース技術者のための技術情報サイトです。Delphi、C++Builderをはじめとする開発ツールやER/Studioなどのデータベースツールに関連する技術記事、ビデオなどを提供しています。EDN編集部は、EDN記事と連携...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2297 2008/08/20 13:35

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング