Jump to content
Korean Random

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


Recommended Posts

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

Понял!

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

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

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

 

 

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

 

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

Link to comment
Short link
Share on other sites

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

Лол.

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

Edited by ShadowHunterRUS
Link to comment
Short link
Share on other sites

В 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

 

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

Edited by Azbuka
  • Upvote 1
Link to comment
Short link
Share on other sites

 

 

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

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

  • Upvote 1
Link to comment
Short link
Share on other sites

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

 

В большинстве вычислительных архитектур байт — это минимальный независимо адресуемый набор данных.
Edited by TwoPizza
  • Upvote 1
Link to comment
Short link
Share on other sites

 

 

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

 

 

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

 

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

  • Upvote 1
Link to comment
Short link
Share on other sites

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

 

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

Link to comment
Short link
Share on other sites

В байте 8 бит!

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

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

 

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

 

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

Edited by TwoPizza
  • Upvote 1
Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...