Перейти к содержимому
Korean Random
Pavel3333

Почему булевая переменная в реальности равна 1 байту, а не 1 биту?

Рекомендуемые сообщения

(редактировалось)

В C89 нет такого типа

Понял!

И рендеринг это очень сложная штука с просчетом всего, что только возможно. Память там явно не под bool отдается, а под кэширование..

Это ясно. Но при рендеринге, когда памяти остается буквально 100-200 МБ, интерфейс 3D-редактора и всё связанное с ним становятся обузой.

Была у меня сцена на 1.5 минуты на конкурс к 23 февраля (в котором занял 3-е место, хотя это не важно), и она рендерилась с 12 часов дня до пяти часов утра! При этом я это делал по нескольку раз (не хватало памяти, тогда ее вообще 2 ГБ было, хоть и Макс 32 бита), включая примочки типа кэширования в файл и прочего. Могу еще кое-что рассказать, к примеру, как тогда я возненавидел MPEG формат, но это будет совсем не по теме.
Изменено пользователем Pavel3333

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

del

Изменено пользователем Pavel3333

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

@Pavel3333, бред.

Почитайте немного про Си и всё поймете.

Изменено пользователем ShadowHunterRUS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Понял.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

а совместимостью со старыми компиляторами пренебрегать нельзя.

 

Зависит от задачи) И если это не энтерпрайз для древнего стака, а пользовательский софт для современной среды исполнения, то пренебрегать не только "не нельзя", а даже нужно)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

Зависит от задачи) И если это не энтерпрайз для древнего стака, а пользовательский софт для современной среды исполнения, то пренебрегать не только "не нельзя", а даже нужно)

Лол.

Назови хоть один компилятор, который может в C11) В C99 тоже не каждый может...

Изменено пользователем ShadowHunterRUS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Назови хоть один компилятор, который может в C11

Pelles C может с 2012 года

Clang может с 01 Dec 2011

GCC, ICC - частично могут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

Pelles C

что? Кто-то этим пользовался? Изменено пользователем ShadowHunterRUS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

В GCC (могу спутать) булевая переменная представляется как 1 БАЙТ, а не бит! Почему?

Работа с битами сложнее и медленнее, да и булевы переменные нужны не так часто.

Конечные автоматы, ООП и другие полезные штуки минимизируют потребность в булевых переменных.

 

Но ведь можно создать в одном байте восемь таких булей и обращаться как к массиву. Или так тоже нельзя делать?

Процессор умеет сравнивать лишь целые байты. К счастью, побитовые логические операции он тоже умеет.

Псевдокод алгоритма для 01010011:

01010011 AND 10000000
РЕЗУЛЬТАТ СРАВНИТЬ С 10000000
ЕСЛИ РАВНО, ТО TRUE
ИНАЧЕ FALSE

01010011 AND 01000000
РЕЗУЛЬТАТ СРАВНИТЬ С 01000000
ЕСЛИ РАВНО, ТО TRUE
ИНАЧЕ FALSE

01010011 AND 00100000
РЕЗУЛЬТАТ СРАВНИТЬ С 00100000
ЕСЛИ РАВНО, ТО TRUE
ИНАЧЕ FALSE

...

Это чтение. Запись предельно проста:

01010011 OR 00000100 = 01010111

01010011 XOR 01000000 = 00010011

 

Вывод: Это глупо даже в условиях ничтожного количества памяти, так как очень медленно и сложно.

Изменено пользователем Azbuka
  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

булевая переменная представляется как 1 БАЙТ, а не бит! Почему?

Полезный наводящий вопрос по теме: что такое байт?

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

@seriych намекал на это:

 

В большинстве вычислительных архитектур байт — это минимальный независимо адресуемый набор данных.
Изменено пользователем TwoPizza
  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Понял, спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

намекал на это:
намекал на то, что вот это неправильный ответ:

 

 

Один байт равен восьми битам. 

 

Минимально адресуемой областью памяти на компьютере может быть не 8 бит. Соответственно и байт на таком устройстве будет не 8 бит. Ну и исходя из названия "минимально адресуемый" нетрудно догадаться, что и булева переменная тоже будет занимать в памяти не 8 бит, а этот самый не факт что восьмибитный байт.

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Понял. Разные компьютеры с разными процессорами (а, значит, разными архитектурами), имеют разный размер одного байта. И потому проще представлять булевую переменную в одном байте. Байт может быть не равен 8 битам.

 

Но почему в школьных учебниках информатики байт приравнивают 8 битам? Это условный идеал?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)
struct MyBools {
char b1:1;
char b2:1;
char b3:1;
char b4:1;
char b5:1;
char b6:1;
char b7:1;
char b8:1;
};
Изменено пользователем SkepticalFox

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Запутали, ей-богу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

В байте 8 бит!

@seriych говорит о чем-то схожем с секторами на жестких дисках... Наверное...

Нет, он говорит об этом:

 

Однако в истории компьютерной техники существовали решения с иными размерами байта (например, 6, 32 или 36 битов), поэтому иногда в компьютерных стандартах и официальных документах для однозначного обозначения группы из 8 битов используется термин «октет» (лат. octet). 

 

В байте не всегда 8 бит, хотя сейчас это стандарт де факто.

Изменено пользователем TwoPizza
  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот теперь все понятно. +

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×