C++で一重引用符に複数の文字を指定するとどうなる?出力される巨大な数値の正体
C++では、ダブルクォート(")は文字列リテラルを表し、シングルクォート(')は1文字だけを含む文字リテラルを表すのが基本ルールです。では、シングルクォートの中に複数の文字を入れて出力しようとすると、どのような結果になるのでしょうか。今回はこの興味深い挙動について解説します。
サンプルコード
#include<iostream>
using namespace std;
main() {
cout << 'ABCD';
}
実行結果
1094861636
このプログラムを実行すると、一見意味不明な大きな数値が出力されます。この数値には、いったいどんな意味があるのでしょうか。
出力された数値の正体
まず重要なポイントとして、この数値はメモリアドレスではありません。これは、各文字のASCIIコード(文字コード)から生成された値です。
今回の例で使用したのは「A」「B」「C」「D」の4文字です。これらの文字のASCIIコードを16進数で表すと、それぞれ以下のようになります。
- A:0x41
- B:0x42
- C:0x43
- D:0x44
これらの16進コードを先頭から順番につなげると、「41424344」という16進数になります。この値を10進数に変換すると、実行結果として表示された「1094861636」が得られるのです。
マルチキャラクタリテラルとは
このように、シングルクォート内に複数の文字を記述したものは「マルチキャラクタリテラル(multicharacter literal)」と呼ばれます。型はintとなり、その値は処理系定義(implementation-defined)です。つまり、コンパイラによって実装方法が異なるため、別のコンパイラでは異なる数値が出力される可能性があります。
実際の開発では、このような書き方は移植性や可読性を損なうため避けるべきです。複数の文字を扱いたい場合は、ダブルクォートを使った文字列リテラル("ABCD"など)を使用するのが正しい作法です。
-
C++で五胞体数(ペンタトープ数)を求める方法
五胞体数とは? 五胞体数(ペンタトープ数)は、パスカルの三角形の第5の対角線上に現れる数列として知られています。この数列を定義するには、パスカルの三角形に少なくとも5つの数が必要となるため、数列の最初の数はパスカルの三角形の第4行である 1 4 6 4 1 から始まります。 本チュートリアルでは、n番目の五胞体数を求める方法を解説します。まずは具体的な例を見てみましょう。 入力 : 1出力 : 1入力 : 4出力 : 35 以下の図から出力を確認できます。 この問題は数列に関するものなので、解法ではまず数列のパターンを見つけることから始めます。 解法のアプローチ このプログラムでは、数列の
-
Pauseキーとは?その役割と今でも使える便利な使い方を解説
フルサイズのキーボードをお使いなら、「Pause」キーや「Pause Break」キーを目にしたことがあるはずです。Scroll LockやHome、Endなどのキーの近くに配置されていることが多いこのキーですが、「見たことはあるけれど、使ったことがない」という方がほとんどではないでしょうか。本記事では、Pauseキーがどのような役割を持つキーなのか、そしていつ・どのように使えるのかを詳しく解説します。 Pauseキーとは まず事実として、現代においてPauseキーにはほとんど用途がありません。このキーが登場したのは20世紀で、当時の主な目的は「実行中のプログラムやコードを一時停止すること」