存在する場合、インクルードするヘッダーファイルはありますか?
このコードはコンパイルエラーを出します:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
存在する場合、インクルードするヘッダーファイルはありますか?
このコードはコンパイルエラーを出します:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
char は必ず1バイトです。1バイトが必ずしも8ビットであるとは限らないというだけです。
CHAR_BITです。私は、バイトの長さが8ビットではない複数の組み込みシステムに取り組んできました。charはサイズが1になるように定義されているため、はい、charは常にバイトです。
charあるのサイズとして明確に定義しています。「バイト」という用語は、他のコンテキストでは異なって定義される場合がありますが、CまたはC ++について説明する場合は、標準の定義に固執することをお勧めします。
using byte = unsigned char(rmpの回答が示唆するように)書き込みを行ってそれを実行するのですか?
回答:
いいえ、C ++にはバイトデータ型はありません。ただし、いつでも標準ライブラリのビットセットヘッダーを含めて、バイトのtypedefを作成できます。
typedef bitset<8> BYTE;
注意:WinDef.hがWindowsコードのBYTEを定義していることを考えると、Windowsをターゲットにする場合は、BYTE以外のものを使用することをお勧めします。
編集:答えが間違っているという提案に応えて。答えは間違っていません。質問は「C ++に「バイト」データ型はありますか?」でした。答えは「いいえ、C ++にはバイトデータ型はありません」と答えました。
それが尋ねられた提案された可能な代替案に関して、なぜ提案された代替案がより良いのですか?
当時のC ++標準の私のコピーによると:
「文字(char)として宣言されたオブジェクトは、実装の基本文字セットのメンバーを格納するのに十分な大きさでなければなりません」:3.9.1.1
コンパイラの実装で基本文字セットのメンバーを格納するために16ビットが必要な場合、charのサイズは16ビットになることを示唆するためにそれを読みました。今日のコンパイラがcharに8ビットを使用する傾向があることは1つのことですが、私が知る限り、それが8ビットになるという保証はありません。
一方、「クラステンプレートbitset <N>は、固定数のビットNで構成されるシーケンスを格納できるオブジェクトを記述します。」:20.5.1。つまり、テンプレートパラメータとして8を指定すると、8ビットで構成されるシーケンスを格納できるオブジェクトになります。
したがって、作成中のプログラムのコンテキストで、代替がcharよりも優れているかどうかは、私が理解している限り、間違っているかもしれませんが、コンパイラとそのときの要件によって異なります。したがって、私に関する限り、提案された代替案が彼らの要件/要望/ニーズに適切であるかどうかを判断するのは、コードを書く個人の責任でした。
bitset<8>優れていunsigned charますか?
std::byte
BIT_CHARですか。それは謎です。宇宙の謎...
いいえ、byteC ++には「」というタイプはありません。あなたが代わりに欲しいのですunsigned char(あなたは、正確に8ビットを必要とする場合、またはuint8_tから<cstdint>、C ++以来11)。一部のコンパイラやその他のコンパイラcharでは、これが必ずしも正確な代替手段ではないことに注意してください。signed charunsigned char
char、signed char、およびunsigned char3つの異なる種類があります。char他の2つのうちの1つと同じ表現を持っています。
unsigned charが8ビットより大きい場合、はuint8_t定義されません。
<stdint.h>代わりに含める必要がある場合があります<cstdint>。
std::byte算術演算を実行することはできません。これは、取引を妨げる可能性があります。
std::byteちょうど追加された1(すなわち、いずれかの仕事のための適切なツールを選択することができstd::byte、char、unsigned charまたはuint_8)。
typedef unsigned char byte;またはよりも優れているのtypedef std::uint8_t byte;ですか?
char*、unsigned char*またはstd::byte*。
std::byte、算術演算を実行することはできません。これは、取引を妨げる可能性があります。
いいえ。ただし、C ++ 11以降、[u] int8_tがあります。
C ++ 98、C ++ 11以降と互換性のあるbyte_liteもあります。
charます。