2017年09月12日
《その25》 整数リテラル(p.141演習4-3),オブジェクトと sizeof演算子(p.141演習4-4)
新版明解C++入門編 p.141 演習4-3
整数リテラル0が8進リテラルであることを論理的に説明せよ。
整数0 と 100 について、C++の操作子を使って基数表示付加を指示した上で、10進数,16進数,8進数での表示をさせてみました。
#include <iostream>
using namespace std;
int main()
{
int i = 0;
cout << "10進数(基数表記)… " << dec << showbase << i << '\n';
cout << "16進数(基数表記)… " << hex << showbase << i << '\n';
cout << " 8進数(基数表記)… " << oct << showbase << i << '\n';
cout << '\n';
i = 100;
cout << "10進数(基数表記)… " << dec << showbase << i << '\n';
cout << "16進数(基数表記)… " << hex << showbase << i << '\n';
cout << " 8進数(基数表記)… " << oct << showbase << i << '\n';
}
0 の場合は、16進数,8進数とも、0 と表記されています。
なので、この結果からは、整数リテラル0 が何進リテラルであるかの説明はできないですね・・・。
では、0 と書かれていて、この整数リテラル0 は何進リテラルであるかと 質問された場合は・・・。
表記のルールから考えてみるしかないのかな・・・。
p.138 に
◇ 10進リテラルの先頭文字として許されるのは 1, 2, 3, 4, 5, 6, 7, 8, 9 のみであり 0 は含まれない。
◇ 16進リテラルは、先頭に 0x または 0X を付けて表記する。
◇ 8進リテラルは、10進リテラルと区別がつくように、先頭に 0 を付けて表記する。
とあります。
整数リテラル0 は、
先頭文字が 0 なので 10進リテラルではない。
先頭に 0x または 0X がないので 16進リテラルではない。
先頭文字が 0 なので 8進数である。8進数を示す先頭文字 0 が、値0 の表示も兼ねているものと思われる。
ということで、いいのかな (^▽^;)
新版明解C++入門編 p.141 演習4-4
文字リテラルと整数リテラルに対してsizeof演算子を適用した値を表示するプログラムを作成せよ。実行結果に対する考察を行うこと。
// p141_演習4-4
#include <iostream>
using namespace std;
int main()
{
cout << sizeof(char) << '\n';
cout << sizeof('a') << '\n';
cout << sizeof(int) << '\n';
cout << sizeof(128) << '\n';
}
整数を表すのに必要な記憶域上の大きさは 4バイト、すなわち、文字を表すのに必要な記憶域上の大きさの4倍であることがわかる。
--
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6692772
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック