Cpp bool型

提供:yonewiki

C++に戻る


本来の表記は「C++(Cpp) bool型」です。この記事に付けられた題名はテンプレート:記事名の制約から不正確なものとなっています。

※このページではC++にのみ存在する機能として、記事タイトルがC++ bool型になっています。

bool型

bool型は真or偽のどちらかを持つための変数です。VisualStudioでは、1バイトの大きさの変数で、true = 1 false = 0 とした1バイトの整数型と考えることができます。bool型が1バイトであることは保証されていません。bool型に0以外の数値を代入演算子で代入した場合に1になるという特徴がある型となります。したがってint型と同様の数値変数として扱うことはできません。bool型変数に対してインクリメント演算子を使うことができますが、デクリメント演算子を使うことができないようになっています。0を保持している、bool型変数に対してインクリメント演算子を使うと1になり偽falseから真trueに変化しますが、デクリメント演算子で戻すことはできません。インクリメント演算子で偽なら真に変え、真なら真のままにするという特殊な操作が可能となりますので、特殊な使い方をするプログラマもいるかもしれません。わかりにくい操作ですので、できれば、bool型変数に対するインクリメントは避けた方が良いと思います。

真や偽、trueやfalseあるいは1や0のどちらをとる値と言われてもピンと来ない人は、ブール代数を学習した方が良いと思います。プログラミングにおいてブール代数の理解は有用です。if文の条件の考え方や、入力のパターンに対する出力の組み合わせを単純化した式の作成ができるようになります。

サンプル

#pragma once
#include <iostream>    //cpp cout etc 一般入出力関数

int _tmain(int argc, _TCHAR* argv[])
{
  bool bFlagA;
  bool bFlagB;
  bFlagA = true;
  bFlagB = false;

  printf("bFlagA(true)->%d bFlagB(false)->%d size(bool)->%d\n",bFlagA,bFlagB,sizeof(bool));
  printf("(true)->%d (false)->%d size(bool)->%d\n",true,false,sizeof(bool));

  if(bFlagA == -1){
    printf("if(bFlagA == -1)->true\n");
  }
  else{
    printf("if(bFlagA == -1)->false\n");
  }
  if(bFlagA == 0){
    printf("if(bFlagA == 0)->true\n");
  }
  else{
    printf("if(bFlagA == 0)->false\n");
  }
  if(bFlagA == 1){
    printf("if(bFlagA == 1)->true\n");
  }
  else{
    printf("if(bFlagA == 1)->false\n");
  }
  if(bFlagA == 2){
    printf("if(bFlagA == 2)->true\n");
  }
  else{
    printf("if(bFlagA == 2)->false\n");
  }


  if(bFlagB == -1){
    printf("if(bFlagB == -1)->true\n");
  }
  else{
    printf("if(bFlagB == -1)->false\n");
  }
  if(bFlagB == 0){
    printf("if(bFlagB == 0)->true\n");
  }
  else{
    printf("if(bFlagB == 0)->false\n");
  }
  if(bFlagB == 1){
    printf("if(bFlagB == 1)->true\n");
  }
  else{
    printf("if(bFlagB == 1)->false\n");
  }
  if(bFlagB == 2){
    printf("if(bFlagB == 2)->true\n");
  }
  else{
    printf("if(bFlagB == 2)->false\n");
  }

  if(-1){
    printf("if(-1)->true\n");
  }
  else{
    printf("if(-1)->false\n");
  }
  if(0){
    printf("if(0)->true\n");
  }
  else{
    printf("if(0)->false\n");
  }
  if(1){
    printf("if(1)->true\n");
  }
  else{
    printf("if(1)->false\n");
  }
  if(2){
    printf("if(2)->true\n");
  }
  else{
    printf("if(2)->false\n");
  }


  bFlagA++;
  bFlagB++;

  printf("bFlagA(true++)->%d bFlagB(false++)->%d size(bool)->%d\n",bFlagA,bFlagB,sizeof(bool));

  bFlagA = -1;
  bFlagB = 2;

  printf("bFlagA(-1)->%d bFlagB(2)->%d size(bool)->%d\n",bFlagA,bFlagB,sizeof(bool));

  bFlagA = 1;
  bFlagB = 0;

  printf("bFlagA(1)->%d bFlagB(0)->%d size(bool)->%d\n",bFlagA,bFlagB,sizeof(bool));

  if(bFlagA == -1){
    printf("if(bFlagA == -1)->true\n");
  }
  else{
    printf("if(bFlagA == -1)->false\n");
  }
  if(bFlagA == 0){
    printf("if(bFlagA == 0)->true\n");
  }
  else{
    printf("if(bFlagA == 0)->false\n");
  }
  if(bFlagA == 1){
    printf("if(bFlagA == 1)->true\n");
  }
  else{
    printf("if(bFlagA == 1)->false\n");
  }
  if(bFlagA == 2){
    printf("if(bFlagA == 2)->true\n");
  }
  else{
    printf("if(bFlagA == 2)->false\n");
  }


  if(bFlagB == -1){
    printf("if(bFlagB == -1)->true\n");
  }
  else{
    printf("if(bFlagB == -1)->false\n");
  }
  if(bFlagB == 0){
    printf("if(bFlagB == 0)->true\n");
  }
  else{
    printf("if(bFlagB == 0)->false\n");
  }
  if(bFlagB == 1){
    printf("if(bFlagB == 1)->true\n");
  }
  else{
    printf("if(bFlagB == 1)->false\n");
  }
  if(bFlagB == 2){
    printf("if(bFlagB == 2)->true\n");
  }
  else{
    printf("if(bFlagB == 2)->false\n");
  }

  return 0;
}

出力

bFlagA(true)->1 bFlagB(false)->0 size(bool)->1
(true)->1 (false)->0 size(bool)->1
if(bFlagA == -1)->false
if(bFlagA == 0)->false
if(bFlagA == 1)->true
if(bFlagA == 2)->false
if(bFlagB == -1)->false
if(bFlagB == 0)->true
if(bFlagB == 1)->false
if(bFlagB == 2)->false
if(-1)->true
if(0)->false
if(1)->true
if(2)->true
bFlagA(true++)->1 bFlagB(false++)->1 size(bool)->1
bFlagA(-1)->1 bFlagB(2)->1 size(bool)->1
bFlagA(1)->1 bFlagB(0)->0 size(bool)->1
if(bFlagA == -1)->false
if(bFlagA == 0)->false
if(bFlagA == 1)->true
if(bFlagA == 2)->false
if(bFlagB == -1)->false
if(bFlagB == 0)->true
if(bFlagB == 1)->false
if(bFlagB == 2)->false


C++に戻る