1. ホーム
  2. c++

[解決済み] C++に'byte'データ型はありますか?

2023-02-19 23:57:21

質問

インクルードするヘッダーファイルはありますか?

このコードはコンパイルエラーになります。

#include <iostream>

using namespace std;

int main()
{
    byte b = 2;

    cout << b << endl;

    return 0;
}

どのように解決するのですか?

C++にはbyteデータ型はありません。しかし、標準ライブラリから bitset ヘッダをインクルードして、byte の型定義を作成することは可能です。

typedef bitset<8> BYTE;

注:WinDef.hはWindowsのコードにBYTEを定義しているため、Windowsをターゲットにする場合はBYTE以外のものを使用したほうがよいでしょう。

編集: 答えが間違っているという指摘に答えて。 答えは間違っていません。質問は「C++に 'byte' データ型はあるか」でした。答えは「C++にbyteデータ型はない」でした。

質問された可能性のある代替案に関して、提案された代替案はなぜ良いのでしょうか?

当時の私のC++標準のコピーによると。

"文字 (char) として宣言されたオブジェクトは、実装の基本文字セットの任意のメンバーを格納するのに十分な大きさでなければならない" 。3.9.1.1

私は、もしコンパイラの実装が基本文字セットのメンバーを格納するために16ビットを必要とするならば、charのサイズは16ビットであろうということを示唆しているように読みました。今日のコンパイラーは char に 8 ビットを使用する傾向がありますが、私の知る限りでは、確かに 8 ビットである保証はありません。

一方、クラステンプレートbitset<N>は、固定ビット数Nからなるシーケンスを格納できるオブジェクトを記述しています: 20.5.1. つまり、テンプレートパラメータに8を指定することで、8ビットからなるシーケンスを格納することができるオブジェクトを得ることができるのです。

そのため、書かれているプログラムの文脈で、代替案が char に適しているかどうかは、間違っているかもしれませんが、私の理解する限り、コンパイラとその時の要件に依存します。したがって、私が知る限り、コードを書いている個人が、提案された代替案が自分の要件/要望/必要性に適切かどうかを判断することができます。