Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Битовое присвоение 
:(
    Опции темы
mes
Дата 13.4.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(UniBomb @  13.4.2009,  09:20 Найти цитируемый пост)
Последний вариант кстате самый читаемый, если "с" - это набор флагов. И если эти флаги как то именованны, то нет ничего более читаемого, чем:
Код

TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);

а как насчет такой записи ?

Код

TWCR = ТWINT | TWSTA | TWEN;

неужто менее читаема ?  smile 
к тому же еще обладает большей гибкостью, так как одно название может объединять несколько флагов. smile



--------------------
PM MAIL WWW   Вверх
UniBomb
Дата 13.4.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 97



mes, ну можно и так. В принципе то это одно и тоже...
PM MAIL ICQ Skype   Вверх
J0ker
Дата 13.4.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



выучить:

ноль
0000b == 0x0

степени двойки
0001b == 0x1
0010b == 0x2
0100b == 0x4
1000b == 0x8

любая комбинация битов получается путем суммирования вышеозначенного
т.о. каждые 4 бита выражаются одной 16-тиричной цифрой, т.е.:
Код

01100011110011000111001110111101
0110     0011     1100     1100     0111         0011     1011         1101
0x4+0x2  0x2+0x1  0x8+0x4  0x8+0x4  0x4+0x2+0x1  0x2+0x1  0x8+0x4+0x2 0x8+0x4+0x1
0x6      0x3      0xC      0xC      0x7          0x3      0xE          0XD
0x63CC73ED


Это сообщение отредактировал(а) J0ker - 13.4.2009, 16:08


--------------------
user posted image
PM MAIL   Вверх
Anikmar
Дата 13.4.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(UniBomb @  13.4.2009,  10:20 Найти цитируемый пост)
Anikmar, Последний вариант кстате самый читаемый, если "с" - это набор флагов. И если эти флаги как то именованны, то нет ничего более читаемого, чем:


А так хуже читается?
Код

#define Flag1 1
#define Flag2 2
#define Flag3 4
#define Flag4 8
#define Flag5 16
#define Flag6 32

// Кому не нравятся #define можно const, enum - без разницы
unsigned int MyMask;

MyMask = Flag1|Flag2|Flag3;

....

if (MyMask&Flag1) { // установлен флаг1 }




PM MAIL ICQ   Вверх
mes
Дата 13.4.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Anikmar @  13.4.2009,  17:04 Найти цитируемый пост)
А так хуже читается?

а вот тут как раз лучше бы выглядело в "развернутом виде"
Код

#define Flag1 ( 1 << 0 )
#define Flag2 ( 1 << 1 )
#define Flag3 ( 1 << 2 )
#define Flag4 ( 1 << 3 )
#define Flag5 ( 1 << 4 )
#define Flag6 ( 1 << 5 )


Цитата(Anikmar @  13.4.2009,  17:04 Найти цитируемый пост)
// Кому не нравятся #define можно const, enum - без разницы

разница есть, но это уже не по теме smile




--------------------
PM MAIL WWW   Вверх
Anikmar
Дата 13.4.2009, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(mes @  13.4.2009,  20:05 Найти цитируемый пост)
а вот тут как раз лучше бы выглядело в "развернутом виде"

Почему? Чисто для восприятия номер бита видеть?

Если это не в тысяче мест в коде используется - можно и в развернутом. А так компилятору лишние вычисления - ведь вряд-ли он их кешировать будет.
PM MAIL ICQ   Вверх
mes
Дата 13.4.2009, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Anikmar @  13.4.2009,  20:17 Найти цитируемый пост)

Почему? Чисто для восприятия номер бита видеть?

да.. для восприятия,  гораздо легче проследить за правильностью ряда 0,1,2,3,4,5, чем 1,2,4,8,16,32.  smile 


Цитата(Anikmar @  13.4.2009,  20:17 Найти цитируемый пост)
Если это не в тысяче мест в коде используется - можно и в развернутом. А так компилятору лишние вычисления - ведь вряд-ли он их кешировать будет. 

Это Вы про этап компиляции ? сделайте вместо #define enum  и вычислится все в одном месте.  smile 






--------------------
PM MAIL WWW   Вверх
Anikmar
Дата 13.4.2009, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(mes @  13.4.2009,  21:33 Найти цитируемый пост)
да.. для восприятия,  гораздо легче проследить за правильностью ряда 0,1,2,3,4,5, чем 1,2,4,8,16,32.   

Ехидный вопрос: а оно надо? 
Чего за правильностью такого ряда следить - он никуда не денется и правильность свою за углом не продаст  smile 
И надо ли знать конкретно знать номер бита, который устанавлиает флаг с именем fEnableMixedMode?  smile 

А в общем - оба подходы правильны, ошибок не содержат, так что - кому что нравится  smile 
PM MAIL ICQ   Вверх
mes
Дата 13.4.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Anikmar @  13.4.2009,  20:42 Найти цитируемый пост)
Ехидный вопрос: а оно надо? 

мне кажется Вы почувствуйте это,  если представите что Вы реализуете набор флагов по документации ( в которой сказано какому биту соответствует каждый флаг)
ну и битов больше чем 8 , к примеру 32..

P.S. а код впоследствии должен быть проверен "ревизором" (если Вам вдруг приятно было вспомнить таблицу умножения, то "ревизору" подобная гимнастика ума может оказаться не кстати) 
 smile 

Это сообщение отредактировал(а) mes - 13.4.2009, 22:28


--------------------
PM MAIL WWW   Вверх
Anikmar
Дата 13.4.2009, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(mes @  13.4.2009,  22:27 Найти цитируемый пост)
P.S. а код впоследствии должен быть проверен "ревизором" (если Вам вдруг приятно было вспомнить таблицу умножения, то "ревизору" подобная гимнастика ума может оказаться не кстати) 

Ни разу не сталкивался с ревизором кода - наверное страшная личность  smile 
Для него специально я бы сделал как-нибудь так:
Код

#define Flag1 (45869/(32758 + 12931))
#define Flag2 ( (852369-456987)/197691 )
и т.д.

 smile 
PM MAIL ICQ   Вверх
J0ker
Дата 13.4.2009, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Anikmar, дефайны - это зло


--------------------
user posted image
PM MAIL   Вверх
Anikmar
Дата 13.4.2009, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(J0ker @  13.4.2009,  23:27 Найти цитируемый пост)
Anikmar, дефайны - это зло 

Без дефайнов никуда. Смотря где и как их использовать - где-то зло, а где-то без них не обойтись.
В данном случае спорить не буду - просто для понятности набрал. Лично я использовал бы enum, о чем и сделал оговорку.


Это сообщение отредактировал(а) Anikmar - 13.4.2009, 23:32
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.