アフィリエイト広告を利用しています

広告

posted by fanblog

2017年09月12日

《その24》 符号付き文字型(signed char 型),符号無し文字型(unsigned char 型),整数型(p.135演習4-1,p.136演習4-2)


新版明解C++入門編 p.126 〜 p.135 の範囲は 説明を読み進めるだけのページですが、そのなかで、私が実際にパソコンでチェックしてみたことを書きます。
人によって、気になる箇所は違うので、参考になるかどうか・・・。

まず、私が利用している処理系の 『単なる文字型』 が、符号付き型 なのか 符号無し型なのかを 調べました。

#include <climits>
#include <iostream>
using namespace std;

int main()
{
cout << "CHAR_MIN … " << CHAR_MIN << '\n';
cout << "CHAR_MAX … " << CHAR_MAX << '\n';
}

b04_0-1.png

これで、符号付きだとわかりました。

ということは、−128 〜 +127
なんとなくですが、 ( ;´・ω・`) 符号無しのほうが 0 〜 255 で分かりやすい気がします・・・。


新版明解C++入門編p.132 に文字コード表がありますが、これを自分の処理系で表示させてみました(下の画像)。ただ、文字型が符号付きなので、私の知識では あまりきれいなコードが書けませんでした。
具体的に言うと、符号付き文字型の −128 〜 −1 の部分の取り扱いが スマートにできませんでした。
符号無し文字型だったら もっとすっきりできそうなのに・・・(* _ω_)...

とりあえずのコードは・・・

#include <iostream>
using namespace std;

int main()
{
cout << " |";
for (int i = 0; i <= 15; i++) cout << hex << " " << i;
cout << '\n';
cout << "-------------------------------------------------------";
cout << '\n';
for (int i = 0; i <= 15; i++) {
cout << " " << i << " |";
for (int j = i; j <= i + 112; j += 16) {
switch (j) {
case '\a': cout << " \\a"; break;
case '\b': cout << " \\b"; break;
case '\f': cout << " \\f"; break;
case '\n': cout << " \\n"; break;
case '\r': cout << " \\r"; break;
case '\t': cout << " \\t"; break;
case '\v': cout << " \\v"; break;
default:
cout << " " << (char)j;
}
}
for (int j = -128 + i; j <= -128 + i + 112; j += 16)
cout << " " << (char)j;
cout << '\n';
}
}

です。
ちょっと くどい感じのコードになってしまいました。結果の画面は、こんな感じになります。

b04_0-2.png




新版 明解C++ 入門編 p.135 演習4-1
  すべての文字について、数字/英大文字/英小文字/記号文字などの文字種が分かる一覧表を出力するプログラムを作成せよ。

// p135_演習4-1
#include <iomanip>
#include <cctype>
#include <iostream>

using namespace std;

int main()
{
cout << "文字" << " コード" << " 文字種\n";
for (char i = 0; ; i++) {
switch (i) {
case '\a': cout << " \\a"; break;
case '\b': cout << " \\b"; break;
case '\f': cout << " \\f"; break;
case '\n': cout << " \\n"; break;
case '\r': cout << " \\r"; break;
case '\t': cout << " \\t"; break;
case '\v': cout << " \\v"; break;
default: cout << " " << (isprint(i) ? i : ' ');
}

cout << ' ' << setw(4) << hex << int(i);
cout << " ";
if (isdigit(i))
cout << " 数字";
if (isupper(i))
cout << " 英大文字";
if (islower(i))
cout << " 英小文字";
if (ispunct(i))
cout << " 記号文字";
if (iscntrl(i))
cout << " 制御文字";
if (isspace(i))
cout << " 空白類文字";
cout << '\n';

if (i == 127) break;
}
}
/*
制御文字 (control character)
ディスプレイ,プリンター,通信装置などの制御に用いる特殊文字。
ASCIIコードでは、0x00〜0x1Fまでの文字と0x7Fが制御文字。
*/

b04_01.png
出力画面表示が縦長なので、途中までです m( _ _;)m




新版 明解C++ 入門編 p.136 演習4-2
  以下の二つのプログラムを作成せよ。
   @ int型の最小値から最大値までの全整数値を8進数・10進数・16進数で表示。
   A unsigned型の最小値から最大値までの全整数値を8進数・10進数・16進数で表示。

// p136_演習4-2_@
#include <iomanip>
#include <climits>
#include <iostream>
using namespace std;

int main()
{
cout << " 8進数 10進数 16進数\n";

int i;
for (i = INT_MIN; i < INT_MIN + 5; i++) {
cout << setw(13) << right << oct << i;
cout << setw(13) << right << dec << i;
cout << setw(11) << right << hex << i << '\n';
}
cout << '\n';
for (i = -3; i <= 3; i++) {
cout << setw(13) << right << oct << i;
cout << setw(13) << right << dec << i;
cout << setw(11) << right << hex << i << '\n';
}
cout << '\n';
for (i = INT_MAX - 4; ; i++) {
cout << setw(13) << right << oct << i;
cout << setw(13) << right << dec << i;
cout << setw(11) << right << hex << i << '\n';
if (i == INT_MAX)
break;
}
}

b04_02-1.png


// p136_演習4-2_A
#include <iomanip>
#include <climits>
#include <iostream>
using namespace std;

int main()
{
cout << " 8進数 10進数 16進数\n";
unsigned i;
for (i = 0; i < 11; i++) {
cout << setw(13) << right << oct << i;
cout << setw(13) << right << dec << i;
cout << setw(11) << right << hex << i << '\n';
}
cout << '\n';
for (i = UINT_MAX - 10; ; i++) {
cout << setw(13) << right << oct << i;
cout << setw(13) << right << dec << i;
cout << setw(11) << right << hex << i << '\n';
if (i == UINT_MAX)
break;
}
}

b04_02-2.png

新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)









--
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6692250
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。