побитовые операции и т.п.
От: black_c0de Германия  
Дата: 12.05.04 13:22
Оценка:
Можно ли с помощью логических операция OR, AND, XOR сделать следующее:

есть байт с неизвестным содержимым. нужно определенные биты в 1 и 0 поставить.
к примеру в функцию передаю два байта. в одном из байтов надо повторить определенный биты второго байта.
к примеру первые три бита сделать аналогичными. как это сделать не анализируя каждый бит отдельно?
// best regardz, black c0de
best regards, black c0de
Re: побитовые операции и т.п.
От: Protey Россия  
Дата: 12.05.04 13:50
Оценка:
Здравствуйте, black_c0de, Вы писали:

_>Можно ли с помощью логических операция OR, AND, XOR сделать следующее:


_>есть байт с неизвестным содержимым. нужно определенные биты в 1 и 0 поставить.

_>к примеру в функцию передаю два байта. в одном из байтов надо повторить определенный биты второго байта.
_>к примеру первые три бита сделать аналогичными. как это сделать не анализируя каждый бит отдельно?

подразумеваем & == AND, | == OR

byte temp = byte2;
temp = temp & 0xE0 (11100000)
byte1 = byte 1 & 0x1F (00011111)
byte1 = byte1 | temp

Это если в byte1 остальные биты важны

P.S. Можно и красивее и проще, но как-то лень обьяснять эту конструкцию
Re: побитовые операции и т.п.
От: glyph  
Дата: 13.05.04 08:25
Оценка:
Здравствуйте, black_c0de, Вы писали:

_>Можно ли с помощью логических операция OR, AND, XOR сделать следующее:

_>есть байт с неизвестным содержимым. нужно определенные биты в 1 и 0 поставить.
_>к примеру в функцию передаю два байта. в одном из байтов надо повторить определенный биты второго байта.
_>к примеру первые три бита сделать аналогичными. как это сделать не анализируя каждый бит отдельно?
Каждая из пар OR-NOT и AND-NOT образуют базис. Это значит, что с помощью одной пары можно выразить любые требуемые операции. В твоем случае надо написать ф-цию, в которой использовать маски, как и сказал Protey. Сделай это любыми известными тебе операторами, а потом просто приведи их к нужному базису. Кстати, XOR — не базисная ф-ция, сл-но обойдешься только OR-NOT или AND-NOT.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.