Форум: "Потрепаться";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
ВнизВопрос по C: как обратиться напрямую к биту Найти похожие ветки
← →
saNat © (2004-10-06 23:59) [0]Собственно тема... Нужно считать и изменить значение бита в байте. Можно это сделать напрямую или использовать что-то типа "и", "или" и т.п.
P.S.: извиняюсь за вопрос по С
С уважением...
← →
Palladin © (2004-10-07 00:07) [1]так устроен компутер, что напрямую никак...
хотя понятие "напрямую" довольно относительно...
можно функцию написать... и создастца иллюзия "напрямую"...
← →
default © (2004-10-07 00:30) [2]или исполь-ать лог-ие опрации либо ассем-ые команды
типа BTR, BTC и другая дребедень
← →
jack128 © (2004-10-07 00:31) [3]еще в С можно объвить структуру с побитовым выраниванием (или как там у них это называется) что типа этого
struct MY_STRUCT
{
char b0: 1;
char b1: 1;
char b2: 1;
// ну и так далее..
}
← →
saNat © (2004-10-07 00:36) [4]Идея такая: нужно сделать циклический сдвиг. Есть операция поразрядного сдвига вправо (">>"). Но при этом мы теряем правый бит. Его нужно кинуть старшим. Вот считать я его уже считал (поразрядным "И" по маске). Осталось только записать старшим.
Есть варианты?
С уважением...
← →
default © (2004-10-07 01:11) [5]
function ByteROR(B: Byte): Byte;
asm
ROR B, 1
end;
← →
АлексейК (2004-10-07 05:00) [6]Ну хоть бы в help заглянул.
XOR, NOT, OR, AND, SHL, SHR
Напримерif Value and (1 shl N) = 1 then //Если бит N в переменной value равен единце
Value := Value xor (1 shl N); //переключаем бит
← →
hjhjhj (2004-10-07 06:31) [7]Проверка необязательна Value and (1 shl N) и так дает nuzhnuju masku XOR (установленный в единицу бит, если тот же бит установлен в источнике).
Теперь надо просто переключить бит: Value:=Value xor (Value and (1 shl N)).
← →
тихий вовочка © (2004-10-07 06:50) [8]Вам же сказали - вопрос по C. А вы сразу примера на Delphi лупить начали.
Насколько я знаю побитовые операции в C только через И(&) и ИЛИ(|), хотя один человек писал, что в STL есть операции доступа к отдельным битам.
← →
Megabyte-ceercop © (2004-10-07 08:32) [9]Есть в си такой тип, как BitArray (или чтото вроде того) Я этим не пользуюсь, т.к. это лишь иллюзия "доступа напрямую"
Я всегда делаю так:
if ((Biter & 0x00100000) != 0) Poehali_bit_stoit();
А по BitArray читай хелп, если любишь изврат :))
Простите за ответ по C.
← →
hjhjhj (2004-10-07 08:42) [10]
> тихий вовочка © (07.10.04 06:50) [8]
Причем тут C и Delphi? Двоичная логика принципиально разная для обоих языков?
А ответ на сабж применительно именно к C уже прозвучал - битовые структуры (bit fields).
← →
VMcL © (2004-10-07 10:16) [11]>>saNat © (06.10.04 23:59)
char test;
// ...
test |= 1 << 5; // установить 5-й бит
test &= !(1 << 3); // сбросить 3-й бит
if (test & (1 << 4))
{
// если 4-й бит установлен, то ...
}
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c