概要

c++でプログラムを書いていた時に、char型の値をiostreamのcoutを使って出力しようとしたら、当初思っていたのとは違うものが出力されました。

なので、今後の戒めとして、そのことを書いておきます。

char型の値の出力

私は、プログラムを書いていて、下記のようにchar型の値を出力しようとしました。

#include <iostream>

using namespace std;

int main()
{
    char c = 66;

    // 64 と出力されることを期待している
    cout << c << std::endl;
    // 実際は B と出力される

    return 0;
}

そのまま、char型の値を出力しようとしたのですが、「数値」が出力されるのではなく「文字」が出力されました。

文字は、ASCIIコードに対応しているのでASCIIコードの「64」は、「B」なので、そのまま「B」が出力されています。

私は、coutの出力では文字列、要はchar型の配列の時に文字として表示すると思っていました。

しかし、実際はchar型であれば必ず文字が表示されるようです。

なので、char型で数値を表示したい場合はint型でキャストしておく必要があります。

#include <iostream>

using namespace std;

int main()
{
    char c = 66;

    // 64 と出力されることを期待している
    cout << (int)c << std::endl;
    // 実際は B と出力される

    return 0;
}

これで、数値として表示できます。

まとめ

よくよく考えてみると、とても初歩的なことであるよう気がしています。

printf関数と違って、ある程度勝手にやってくれて便利なのですが、型による挙動の違いを覚えて置く必要があることを思い知りました。