SHOEISHA iD

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

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

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

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

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

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

引き算

問題

 今度は引き算です。6種類の言語を使って、とてもカンタンな引き算「128-256」の値を確認してみましたが、1つだけ出力結果が異なるものがあります。さて、それはどれでしょうか?

Delphi
program Project1;
{$APPTYPE CONSOLE}
var
  x: Shortint;
begin
  x := 128-256;
  Write(x);
end.
C++
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
  __int8 x = 128-256;
  cout << x;
  return 0;
}
Java
public class Project1 {
  public static void main(String[] args) {
    byte x = 128-256;
    System.out.print(x);
  }
}
C#
namespace project1 {
public class Project1 {
  public static void Main() {
    sbyte x = 128-256;
    System.Console.Write(x);
  }
}
}
PHP5
<?php
$x = 128-256;
echo $x;
?>
Ruby
x = 128-256
print x
解説

 正解は「C++」。

 C++では、期待した「-128」は出力されません。それ以外の言語では正しく「-128」が出力されます。Delphi/Java/C#/Ruby/PHPでは結果について特別意識することはないでしょう。C++では、通常の「int型」ではなく「__int8型」を使用しているのが気にかかります。

 確かに「__int8型」は8bitの範囲(-128~127)の値を扱えますから、「-128」と出力されるべきでしょう。しかし一般的な実装では「__int8型」は「char型」であることから、「-128」を「文字(16進数で0x80)」として出力する処理が実行されます。この結果、「-128」とは出力されません。

 問題のコードでは、short型などへの明示的なキャストが必要になります。以下に示すようなコードにより、期待した「-128」が出力されます。

cout << (short)x;

 なお、C#では「byte型」ではなく「sbyte型」を使用しています。C#の「byte型」は符号無しですので、符号付きの値を処理するには「sbyte型」が必要となる点に注意が必要です。

次のページ
ゼロを比較

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング