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

Фото

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


  • Чтобы отвечать, сперва войдите на форум
38 ответов в теме

#21 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 1 922 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 08 Август 2016 - 22:51

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


Понял!

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


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

Изменено: Pavel3333, 08 Август 2016 - 23:51

  • 0

#22 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 1 922 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 08 Август 2016 - 23:33

del

Изменено: Pavel3333, 08 Август 2016 - 23:50

  • 0

#23 SkepticalFox

SkepticalFox

    ShadowHunterRUS

  • Premium Member
  • 3 492 сообщений
  • Nick:SkepticalFox
  • WoT Server:RU (Русский)
  • Город: Moscow

Опубликовано 08 Август 2016 - 23:37

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

Изменено: ShadowHunterRUS, 08 Август 2016 - 23:43

  • 0

#24 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 1 922 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 08 Август 2016 - 23:50

Понял.
  • 0

#25 Yupi

Yupi
  • Пользователь
  • 2 454 сообщений

Опубликовано 09 Август 2016 - 03:56

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

 

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


  • 0

#26 SkepticalFox

SkepticalFox

    ShadowHunterRUS

  • Premium Member
  • 3 492 сообщений
  • Nick:SkepticalFox
  • WoT Server:RU (Русский)
  • Город: Moscow

Опубликовано 09 Август 2016 - 09:37

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

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

Изменено: ShadowHunterRUS, 09 Август 2016 - 09:37

  • 0

#27 Yupi

Yupi
  • Пользователь
  • 2 454 сообщений

Опубликовано 09 Август 2016 - 09:47

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

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

Clang может с 01 Dec 2011

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


  • 0

#28 SkepticalFox

SkepticalFox

    ShadowHunterRUS

  • Premium Member
  • 3 492 сообщений
  • Nick:SkepticalFox
  • WoT Server:RU (Русский)
  • Город: Moscow

Опубликовано 09 Август 2016 - 10:33

Pelles C

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

Изменено: ShadowHunterRUS, 09 Август 2016 - 10:34

  • 0

#29 Azbuka

Azbuka
  • Пользователь
  • 970 сообщений

Опубликовано 09 Август 2016 - 19:40

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

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

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

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

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

01010011 OR 00000100 = 01010111

01010011 XOR 01000000 = 00010011

 

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


Изменено: Azbuka, 09 Август 2016 - 19:51

  • 1

#30 seriych

seriych

    Всем счастья

  •  XVM Team
  • 7 379 сообщений
  • Nick:seriych
  • WoT Server:RU (Русский)
  • Город: Чайковский/Москва

Опубликовано 11 Август 2016 - 18:49

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

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


  • 1

#31 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 1 922 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 11 Август 2016 - 19:01

что такое байт?

Байт — единица хранения и обработки цифровой информации; совокупность битов, обрабатываемая компьютером одномоментно

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


  • 0

#32 Yupi

Yupi
  • Пользователь
  • 2 454 сообщений

Опубликовано 11 Август 2016 - 19:03

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

 

В большинстве вычислительных архитектур байт — это минимальный независимо адресуемый набор данных.

Изменено: TwoPizza, 11 Август 2016 - 19:03

  • 1

#33 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 1 922 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 11 Август 2016 - 19:11

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

#34 seriych

seriych

    Всем счастья

  •  XVM Team
  • 7 379 сообщений
  • Nick:seriych
  • WoT Server:RU (Русский)
  • Город: Чайковский/Москва

Опубликовано 11 Август 2016 - 19:39

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

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

 

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


  • 1

#35 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 1 922 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 11 Август 2016 - 20:24

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

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

#36 SkepticalFox

SkepticalFox

    ShadowHunterRUS

  • Premium Member
  • 3 492 сообщений
  • Nick:SkepticalFox
  • WoT Server:RU (Русский)
  • Город: Moscow

Опубликовано 11 Август 2016 - 20:39

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, Сегодня, 10:45

  • 0

#37 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 1 922 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 11 Август 2016 - 21:10

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

#38 Yupi

Yupi
  • Пользователь
  • 2 454 сообщений

Опубликовано 12 Август 2016 - 06:48

В байте 8 бит!
seriych говорит о чем-то схожем с секторами на жестких дисках... Наверное...

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

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

 

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


Изменено: TwoPizza, 12 Август 2016 - 06:52

  • 1

#39 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 1 922 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 12 Август 2016 - 10:14

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





0 пользователей читают эту тему

0 зарегистрированных, 0 гостей, 0 невидимых

© Mr 13