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

広告

posted by fanblog

2018年03月30日

《その353》setf関数


 setf関数,unsetf関数

 fmtflags setf(fmtflags x);
 書式制御情報に x を加え(更新ではありません)、加える前の書式制御情報を返却します。

 void unsetf(fmtflags x);
 書式制御情報 x を消去します。


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

★1.
 最初に、C++ のデフォルトの書式制御情報のままで、d の値を出力します。
C++ のデフォルトの書式制御情報では、ios_base::dec, ios_base::skipws の2つがセットされています。
 次に、
  ios_base::fmtflags f0
      = cout.setf(ios_base::scientific);
として、浮動小数点数の出力を、指数付き記法で行うように設定します。
f0 には、設定前の書式制御情報が代入されます。
ここで、f0 のビット構成を画面出力しますが、これは、変更前の、デフォルトの書式制御情報です。
 最後に、
  cout.unsetf(ios_base::dec);
で、ios_base::dec を除去します。これは、★2.で ios_base::scientific をセットする際に、ios_base::dec のビットがそのまま残ってしまうからです。
setf関数によるセットは、更新ではなく、加える形の変更です。


★2.
 まず、指数付き記法で d の値を出力します。
 次に、
  ios_base::fmtflags f1
      = cout.setf(ios_base::fixed);
として、浮動小数点数の出力を、固定小数点記法で行うように設定します。
f1 には、設定前の書式制御情報が代入されます。
ここで、f1 のビット構成を画面出力しますが、これは、指数付き記法の書式制御情報です。
 最後に、
  cout.unsetf(ios_base::scientific);
で、ios_base::scientific を除去します。

★3.
 固定小数点記法で d の値を出力します。
 次に、
  ios_base::fmtflags f2
      = cout.setf(f0);
として、最初の設定に戻します。
f2 には、戻す前の書式制御情報が代入されます。
ここで、f2 のビット構成を画面出力しますが、これは、固定小数点記法の書式制御情報です。
 最後に、
  cout.unsetf(ios_base::fixed);
で、ios_base::fixed を除去します。

★4.
 最初の書式制御情報に戻っていることを、d の値と書式制御情報のビット構成を画面出力して確認します。

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

#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";
cout << d << '\n';
ios_base::fmtflags f0
= cout.setf(ios_base::scientific);
cout << bits_of(f0) << "\n\n";
cout.unsetf(ios_base::dec);

cout << "★2.\n";
cout << d << '\n';
ios_base::fmtflags f1
= cout.setf(ios_base::fixed);
cout << bits_of(f1) << "\n\n";
cout.unsetf(ios_base::scientific);

cout << "★3.\n";
cout << d << '\n';
ios_base::fmtflags f2 = cout.setf(f0);
cout << bits_of(f2) << "\n\n";
cout.unsetf(ios_base::fixed);

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

h12_0034.png

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

お名前:

メールアドレス:


ホームページアドレス:

コメント:

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

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

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

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