Другие языки программирования и технологии

C++ программирование. Булевые (логические) переменные.

Изучил я переменную bool и наткнулся на такой вопрос. Ведь значение true=1, а значение false=0, так? Можно ли массивом bool написать двоичный код по стандартам ASKII и скомпилировать его в компиляторе?
Саша Важов
Саша Важов
230
bool - это на самом деле int (на разных машинах может занимать разное пространство, но в общем виде это int);
false - это ноль;
true - это любое число, отличное от нуля (чаще всего =1, но может быть =0xFF - для байта, =0xFFFF - для 2 байт, ..и т. д.);
Массив bool m[9] просто будет занимать 9 int-ов (на некоторых машинах это int8_t), вот и всё.
А вот со структурой уже интереснее:
struct MY_ASCII {
char ch:1;
char ch:1;
char ch:1;
char ch:1;
char ch:1;
char ch:1;
char ch:1;
char ch:1;
} Ascii[1] = { true,true,true,false,false,false,true,false } // символ G (0x47 - задом наперёд -0xE2);
Так что: ДА, МОЖНО! *
*с некоторыми оговорками...
Серёга =)
Серёга =)
26 548
Лучший ответ
Серёга =) С русскими символами сложнее, т. к. Linux использует кодировку UTF-8, а Windows - UTF-16/cp1251
Вячеслав Шапоренко та же проблема, что и у предыдущего
Это не массив bool, это массив структур :)
Переменная bool занимает в памяти целый байт. Так что не получится.
Vbif Dl
Vbif Dl
57 016
Переменные типа bool хранятся по одному байту на переменную, как одиночные, так и в массивах. Фактически меняется только правый бит байта переменной. Но битовые контейнеры bitset хранят в байте по 8 бит булевских значений, так что с их помощью можно записать двоичный код. Однако
а) кому это нужно, когда можно записывать байты с помощью шестнадцатиричных чисел или, менее эффективно, с помощью битовых структур?
б) компилятору нужен обычный код ASCII, зачем ухитряться писать вместо символов их коды?
Василий Юраш Менее эффективно? Плюсы - это надмножество Си. Т. е. bitset сначала компилируется в битовую структуру, а уже потом в DB 0x..,
Нет
*****judoist *****
*****judoist *****
14 459
Саша Важов Но ведь фактически это возможно?
Можешь. Не слушай этих неумёх.

vector< array< bool,7>> ascii_word{ {1,1,0,1,0,0,0}, {1,1,0,0,1,0,1}, {1,1,0,1,1,0,0}, {1,1,0,1,1,0,0}, {1,1,0,1,1,1,1} };
string word;
for( array< bool,7 > const & ch : ascii_word )
{ int sum=0; for(bool const b:ch) sum<<=1, sum|=b;
word.append(1,sum);
}
Вячеслав Шапоренко вот в этот момент
for(bool const b:ch) sum<<=1, sum|=b;
массив bool превращается в байт данных и перестает быть массивом bool, что требовалось по заданию
Чё?
YA
Yerbol Aitbayev
101