| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Битовое присвоение |
| Автор: TheDestroyer 10.4.2009, 12:34 | ||||
| Подскажите пожалуйста, возможно ли присваивать переменным значение в битовом представлении? Т.е. что бы писать не
а
|
| Автор: InvalidProperty 10.4.2009, 12:46 |
| хм... у меня не получилось ни в MS VS 2005, ни под gcc 4.1.2, хотя нашел такую информацию http://mandrivausers.org/index.php?showtopic=9326 http://www.gursey.gov.tr/Gilgamesh-WWW/IntelCompDocs/ref/cnst_c.htm |
| Автор: Lazin 10.4.2009, 12:50 | ||
|
| Автор: UniBomb 10.4.2009, 12:54 | ||
кажеться я не туда пишу.... |
| Автор: Lazin 10.4.2009, 13:23 |
а где такое работает? |
| Автор: Acer 10.4.2009, 13:32 |
| Lazin, мож свой компилятор юзает 0x00000010 - эт аж никак не 2 |
| Автор: UniBomb 10.4.2009, 14:43 |
| Lazin, avr-gcc 4.3.0 |
| Автор: UniBomb 10.4.2009, 15:22 |
| Acer, преффикс "0b" насколько я знаю не включон в стандарты (я имею в языках С и С++), поэтому вполне возможно что эта штука не везде работает. Такая конструкция встречается в основном в старых компиляторах и в компиляторах для микропроцессорах. avr-gcc как раз к последнему и относится, ведь в этой области было бы странно, еслибы такая конструкция не поддерживалась бы ;) |
| Автор: math64 11.4.2009, 20:11 | ||
|
| Автор: Riddik 12.4.2009, 02:01 |
| |
| Автор: UniBomb 13.4.2009, 09:17 | ||
И ещё как вариант:
|
| Автор: Anikmar 13.4.2009, 10:15 |
| Чего только люди не придумают, чтобы свой код сделать нечитаемым. |
| Автор: UniBomb 13.4.2009, 10:20 | ||
Anikmar, Последний вариант кстате самый читаемый, если "с" - это набор флагов. И если эти флаги как то именованны, то нет ничего более читаемого, чем:
|
| Автор: andrew_121 13.4.2009, 11:35 |
В Ассемблере точно работает. |
| Автор: TheDestroyer 13.4.2009, 12:33 |
| Спасибо, да, похоже, прямого задания в бинарном виде числа в таких средах как Borland C++ и VC нет. |
| Автор: UniBomb 13.4.2009, 12:44 |
| mes, ну можно и так. В принципе то это одно и тоже... |
| Автор: J0ker 13.4.2009, 16:07 | ||
| выучить: ноль 0000b == 0x0 степени двойки 0001b == 0x1 0010b == 0x2 0100b == 0x4 1000b == 0x8 любая комбинация битов получается путем суммирования вышеозначенного т.о. каждые 4 бита выражаются одной 16-тиричной цифрой, т.е.:
|
| Автор: Anikmar 13.4.2009, 18:04 | ||||
А так хуже читается?
|
| Автор: mes 13.4.2009, 20:05 | ||
а вот тут как раз лучше бы выглядело в "развернутом виде"
разница есть, но это уже не по теме |
| Автор: Anikmar 13.4.2009, 21:17 |
Почему? Чисто для восприятия номер бита видеть? Если это не в тысяче мест в коде используется - можно и в развернутом. А так компилятору лишние вычисления - ведь вряд-ли он их кешировать будет. |
| Автор: mes 13.4.2009, 21:33 | ||
да.. для восприятия, гораздо легче проследить за правильностью ряда 0,1,2,3,4,5, чем 1,2,4,8,16,32.
Это Вы про этап компиляции ? сделайте вместо #define enum и вычислится все в одном месте. |
| Автор: Anikmar 13.4.2009, 21:42 | ||
Ехидный вопрос: а оно надо? Чего за правильностью такого ряда следить - он никуда не денется и правильность свою за углом не продаст И надо ли знать конкретно знать номер бита, который устанавлиает флаг с именем fEnableMixedMode? А в общем - оба подходы правильны, ошибок не содержат, так что - кому что нравится |
| Автор: mes 13.4.2009, 22:27 |
мне кажется Вы почувствуйте это, если представите что Вы реализуете набор флагов по документации ( в которой сказано какому биту соответствует каждый флаг) ну и битов больше чем 8 , к примеру 32.. P.S. а код впоследствии должен быть проверен "ревизором" (если Вам вдруг приятно было вспомнить таблицу умножения, то "ревизору" подобная гимнастика ума может оказаться не кстати) |
| Автор: Anikmar 13.4.2009, 23:24 | ||||
Ни разу не сталкивался с ревизором кода - наверное страшная личность Для него специально я бы сделал как-нибудь так:
|
| Автор: J0ker 13.4.2009, 23:27 |
| Anikmar, дефайны - это зло |
| Автор: Anikmar 13.4.2009, 23:32 |
Без дефайнов никуда. Смотря где и как их использовать - где-то зло, а где-то без них не обойтись. В данном случае спорить не буду - просто для понятности набрал. Лично я использовал бы enum, о чем и сделал оговорку. |