포함 할 헤더 파일이있는 경우
이 코드는 컴파일 오류를 제공합니다.
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
답변
C ++에는 바이트 데이터 유형이 없습니다. 그러나 항상 표준 라이브러리의 bitset 헤더를 포함하고 바이트에 대한 typedef를 만들 수 있습니다.
typedef bitset<8> BYTE;
NB : WinDef.h가 Windows 코드에 대해 BYTE를 정의한다는 점을 감안할 때 Windows를 대상으로하려는 경우 BYTE가 아닌 다른 것을 사용할 수 있습니다.
편집 : 답이 틀렸다는 제안에 대한 응답으로. 대답은 틀리지 않습니다. 질문은 “C ++에 ‘바이트’데이터 유형이 있습니까?”였습니다. 대답은 “C ++에는 바이트 데이터 유형이 없습니다”입니다.
제안 된 가능한 대안과 관련하여 제안 된 대안이 더 나은 이유는 무엇입니까?
당시 C ++ 표준 사본에 따르면 다음과 같습니다.
“문자 (char)로 선언 된 객체는 구현 기본 문자 집합의 구성원을 저장할 수있을만큼 충분히 커야합니다.”: 3.9.1.1
컴파일러 구현에서 기본 문자 집합의 구성원을 저장하는 데 16 비트가 필요한 경우 문자의 크기는 16 비트가 될 것이라고 제안했습니다. 오늘날의 컴파일러는 문자에 8 비트를 사용하는 경향이 있지만 내가 말할 수있는 한 그것이 8 비트가 될 것이라는 보장은 확실히 없습니다.
반면, “클래스 템플릿 bitset <N>은 고정 된 수의 비트 N으로 구성된 시퀀스를 저장할 수있는 객체를 설명합니다.” : 20.5.1. 즉, 8을 템플릿 매개 변수로 지정하여 8 비트로 구성된 시퀀스를 저장할 수있는 객체로 끝납니다.
작성되는 프로그램의 맥락에서 대안이 char보다 더 나은지 여부는 내가 이해하는 한, 비록 내가 틀렸을지라도 컴파일러와 그 당시의 요구 사항에 달려 있습니다. 따라서 제안 된 대안이 요구 사항 / 원하는 / 필요한 사항에 적합한 지 여부를 결정하는 것은 내가 아는 한 코드를 작성하는 개인에게 달려 있습니다.
답변
아니요, byte
C ++ 에는 ” ” 라는 유형이 없습니다 . 당신이 대신 원하는 것은 unsigned char
(당신이, 정확하게 8 개 비트를 필요로하는 경우, 또는 uint8_t
에서 <cstdint>
, C부터 + 11 ). 참고 char
뜻으로, 반드시 정확한 대안이없는 signed char
일부 컴파일러와 unsigned char
다른 사람.
답변
답변
Windows를 사용하는 경우 WinDef.h에 다음이 있습니다.
typedef unsigned char BYTE;