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

広告

posted by fanblog

2018年03月30日

《その352》flags関数


 flags関数

 fmtflags flags() const;
 この形式の flags関数は、基底クラス ios_base に設定されているビットマスク型の書式制御情報を返却します。

 fmtflags flags(fmtflags x);
 この形式の flags関数は、基底クラス ios_base に設定されている書式制御情報を x に変更し、変更後の値を返却します。


 以下、順を追って、プログラムを説明します。

★1.
  ios_base::fmtflags f = cout.flags();
C++ の規定の fmtflags型書式制御情報を f に読み込みます。
そして、確認のため、そのビット構成と d の値を画面出力します。

★2.
  cout.flags(ios_base::scientific | ios_base::skipws);
として、浮動小数点数の出力を、指数付き記法で行うように設定します。
やはり、確認のため、そのビット構成と d の値を画面出力します。
ここで、
  ios_base::skipws
の指定は、特定の場合の読み込み時に空白文字を無視するようにするものです。
ここで指定する必要はありませんが、わざわざ指定した理由は、この指定をしないと書式制御情報のビット構成の第 0ビットが 0 になってしまい、浮動小数点数の出力と無関係の設定変更が同時に行われてしまうからです。

★3.
 浮動小数点数の出力を、固定小数点記法で行うように設定します。
やはり、確認のため、そのビット構成と d の値を画面出力します。

★4.
  cout.flags(f);
f に代入しておいた最初の書式制御情報を、セットします。
最後に、元通りの出力書式に戻っていることを確認します。

 以下は、プログラムです。

#include <iostream>
using namespace std;

const unsigned bits
= numeric_limits<unsigned int>::digits;

const char* bits_of(unsigned x) {
static char str[bits + 1];

unsigned n = bits;
for (unsigned i = 0; i < n; i++) {
if ((x >> i) & 1U)
str[n - i - 1] = '1';
else
str[n - i - 1] = '0';
}
str[n] = '\0';
return str;
}

int main() {
double d = 123.456 * 123.456;

cout << "★1.\n";
ios_base::fmtflags f = cout.flags();
cout << bits_of(f) << '\n';
cout << d << "\n\n";

cout << "★2.\n";
cout.flags(ios_base::scientific
| ios_base::skipws);
cout << bits_of(cout.flags())
<< '\n';
cout << d << "\n\n";

cout << "★3.\n";
cout.flags(ios_base::fixed
| ios_base::skipws);
cout << bits_of(cout.flags())
<< '\n';
cout << d << "\n\n";

cout << "★4.\n";
cout.flags(f);
cout << bits_of(cout.flags())
<< '\n';
cout << d << '\n';
}

h12_0033.png

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

お名前:

メールアドレス:


ホームページアドレス:

コメント:

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

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

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

 たまに、クリック お願いします 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日以上新しい記事の更新がないブログに表示されております。