|
|
|
Как заменить биты?
|
|||
|---|---|---|---|
|
#18+
Есть переменная типа WORD. Как мне заминить, например, 6 и 7 биты старшего байта? И где можно почитать по теме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 12:54 |
|
||
|
Как заменить биты?
|
|||
|---|---|---|---|
|
#18+
А логические операторы на что?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 13:23 |
|
||
|
Как заменить биты?
|
|||
|---|---|---|---|
|
#18+
Если есть число WORD numb; BYTE h_bt = HIBYTE(numb); Маска для шестого бита: BYTE mask = 1<<(6-1); Его значение BYTE bit_6 = ((h_bt & mask) != 0) ? 1 : 0; Сбросить значение 6-го бита h_bt ^= h_bt & mask; flip bit_6 = !bit_6; Поместить в число h_bt |= bit_6 << (6-1); окончательно numb = MAKEWORD(l_bt, h_bt); Чего-то я вот все это понаписал и подумал - может можно проще?? Например, можно использовать битовые поля... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 13:31 |
|
||
|
Как заменить биты?
|
|||
|---|---|---|---|
|
#18+
компилятор не гарантирует способ размещения битовых полей (хотя все они размещают их правильно) -------- можно поиграть, если уж на то пошло Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. выглядит сурово и навороченно... но стоит откомпилить релиз + дебаг + вся оптимизация и посмотреть что там получается... в общем все инлайны хорошо работают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 14:39 |
|
||
|
Как заменить биты?
|
|||
|---|---|---|---|
|
#18+
Дайте и мне шашкой помахать! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 16:38 |
|
||
|
Как заменить биты?
|
|||
|---|---|---|---|
|
#18+
И еще можно попытаться использовать класс stl bitset :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 12:08 |
|
||
|
Как заменить биты?
|
|||
|---|---|---|---|
|
#18+
тогда уже и std::vector<bool> зачастую они это интересно частично специализируют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 13:29 |
|
||
|
Как заменить биты?
|
|||
|---|---|---|---|
|
#18+
А не проще ли битовую маску одеть AND'ом и потом OR'ом поработать. В одну строчку дёшево и сердито ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 15:04 |
|
||
|
Как заменить биты?
|
|||
|---|---|---|---|
|
#18+
специально смотрел на 7.1 при компиляции в релиз он выдает одинаковый код что с применением классов, что с применением просто логических операций в одной строке. понимаешь, классы, в отличии от макросов или непосредственных логических операторов можно сделать типобезопасными, с проверкой в compile-time и debug-run-time, чтобы, скажем, кто-то в short не выставлял 31-й бит и не искал бы долго потом ошибку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 02:20 |
|
||
|
Как заменить биты?
|
|||
|---|---|---|---|
|
#18+
2 CEMb кстати, заметь, я в своих примерах ставлю маску, а не бит... объяснить, почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2004, 12:12 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=456&tid=2035354]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
| others: | 183ms |
| total: | 283ms |

| 0 / 0 |
