Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2014, 17:51   #21
Haric_110
Форумчанин
 
Регистрация: 03.03.2013
Сообщений: 102
По умолчанию

Итак, что же такое bool.
Из нашей дискуссии следует, что bool - тип данных, принимающий на вход любое число и дающий на выход false (если это число - 0), или true (в остальных случаях).
Переменная bool занимает столько памяти, сколько требуется для числа, подаваемого на вход (это немного странно).
Тогда вопрос: зачем на вход переменной bool задавать какое-то число? Обычно ей присваивают значение true или false. Удобнее считать число в какую-нибудь числовую переменную, затем сравнить её с нулём,после присвоить переменной типа bool значение true или false. Ещё раз привожу фрагмент waleri:
Код:
char ch;
cin >> ch;
exit = ('0' == ch) ? true : false;
Мне кажется, что bool должна принимать на вход только два числа (0 и 1) или (0 и -1) остальное не логично. Хотя мы обычно вовсе пишем true и false. Можно предположить, что bool - пользовательский тип данных (что-то вроде того), который принимает на вход одно число и одну строку. Распознаёт 0, 1 (или любое число отличное от нуля), true и false. Раз bool принимает/выдаёт число и строку, значит весит она как минимум три байта (один - число и два - строка). Возможно я ошибся со строкой.
Как Вам это, уважаемые программисты?

Конечно же, я не прав. Я забыл, что выполняется !false = true и !true = false. Тогда я склоняюсь к тому, что bool принимает не любое число, а только два - 0 и (1 или -1). В С++ - 0 и 1. Следовательно весит bool 1 байт.

Последний раз редактировалось Stilet; 11.02.2014 в 18:32.
Haric_110 вне форума Ответить с цитированием
Старый 11.02.2014, 18:34   #22
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как Вам это, уважаемые программисты?
Никак. скомпилируй код, открой в дизассемблере и посмотри как с булями работа идет. Это будет ответ на твой вопрос. Я по прежнему на своем мнении остаюсь, не смотря на то что возможно оно в Си неприменимо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.02.2014, 19:11   #23
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Оператор >> перегружен для многих стандартных типов (bool в том числе). При любом вводе из объекта потокового ввода cin, выполняется приведение типов. Работает в точности, как говорит Stilet. Проверить можно здесь. Bool занимает 1 байт (может зависеть от компилятора)

В случае неправильного ввода, объект потокового ввода помещает флаг ошибки, поэтому в случае ТС можно сделать следующее
Код:
while((cin >> val) && val) { // пока true
   cin.clear(); // очистим ошибку
   ...
}
Код не самый очевидный, но рабочий.
MaTBeu вне форума Ответить с цитированием
Старый 11.02.2014, 19:27   #24
Haric_110
Форумчанин
 
Регистрация: 03.03.2013
Сообщений: 102
По умолчанию

Хорошо. Я всё понял. Всем большое спасибо.
Haric_110 вне форума Ответить с цитированием
Старый 11.02.2014, 21:14   #25
marenko.lilia
Пользователь
 
Аватар для marenko.lilia
 
Регистрация: 25.12.2013
Сообщений: 91
По умолчанию

Всем спасибо за ответы!

Последний раз редактировалось marenko.lilia; 11.02.2014 в 21:16.
marenko.lilia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с кодом! sid Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 13.04.2010 17:53
помогите разобраться с кодом samosval Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 27.12.2007 00:20
Помогите разобраться с кодом С++ Noor Помощь студентам 20 10.10.2007 17:42