Якщо існує, чи є файл заголовка для включення?
Цей код видає помилку компіляції:
#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 - це обов'язково один байт. Просто байт - це не обов’язково 8 біт.
CHAR_BIT. Я працював над кількома вбудованими системами, де байти не мають довжини 8 біт. Знаком char визначено розмір 1, так що так, char - це завжди байт.
char, який становить щонайменше 8 біт. Термін "байт" може бути визначений по-різному в інших контекстах, але при обговоренні C або C ++ краще дотримуватися визначення стандарту.
using byte = unsigned charі робити з цим (як пропонується відповідь rmp)?
Відповіді:
Ні, в С ++ немає байтового типу даних. Однак ви завжди можете включити заголовок бітсету зі стандартної бібліотеки і створити typedef для байта:
typedef bitset<8> BYTE;
Примітка. З огляду на те, що WinDef.h визначає BYTE для коду Windows, можливо, ви захочете використовувати щось інше, ніж BYTE, якщо ви плануєте націлити Windows.
Редагувати: у відповідь на припущення, що відповідь неправильна. Відповідь не хибна. Питання було "Чи є в C ++ тип даних" байт "?". Відповідь була і є: "Ні, у C ++ немає байтового типу даних", як відповіли.
Щодо запропонованої можливої альтернативи, для якої було поставлено запитання, чому запропонована альтернатива краща?
Відповідно до моєї копії стандарту C ++, на той час:
"Об'єкти, оголошені як символи (char), повинні бути достатньо великими для зберігання будь-якого члена базового набору символів реалізацій": 3.9.1.1
Я прочитав це, щоб припустити, що якщо реалізація компілятора вимагає 16 біт для зберігання члена основного набору символів, тоді розмір символу буде 16 біт. Те, що сучасні компілятори, як правило, використовують 8 бітів для символу - це одне, але, наскільки я можу сказати, точно немає гарантії, що це буде 8 бітів.
З іншого боку, "біт шаблону класу <N> описує об’єкт, який може зберігати послідовність, що складається з фіксованої кількості бітів, N." : 20.5.1. В інших словах, вказавши 8 як параметр шаблону, я отримую об'єкт, який може зберігати послідовність, що складається з 8 бітів.
Чи є альтернативу кращою для написання, у контексті написаної програми, отже, наскільки я розумію, хоч я і помиляюся, залежить від вашого компілятора та ваших вимог на той час. Отже, особа, яка пише код, на мій погляд, повинна була визначити, чи запропонована альтернатива відповідає їхнім вимогам / потребам / потребам.
bitset<8>краще ніж unsigned char?
std::byte
BIT_CHAR? Це загадка. Таємниця Всесвіту ..
Ні, byteу C ++ немає типу, який називається " ". Натомість ви хочете unsigned char(або, якщо вам потрібно рівно 8 біт, uint8_tвід <cstdint>, починаючи з C ++ 11 ). Зауважте, що charце не обов’язково точна альтернатива, як це означає signed charдля одних компіляторів та unsigned charінших.
char,, signed charі unsigned charє трьома різними типами. charмає таке саме подання, як один із двох інших.
unsigned charбільший за 8 біт, тоді uint8_tне буде визначено.
<stdint.h>замість <cstdint>.
std::byteне може виконуватися арифметика на ній, що може перервати угоду.
std::byteце всього лише доповнення можна вибрати правильний інструмент для роботи (тобто або 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 .
namespace std
{
// define std::byte
enum class byte : unsigned char {};
};
Це якщо у вашій версії С ++ немає std :: byte, буде визначено тип байта в просторі імен std. Зазвичай ви не хочете додавати речі в std, але в цьому випадку це стандартна річ, якої не вистачає.
std :: byte з STL робить набагато більше операцій.
char.