Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.24;
Скачать: CL | DM;

Вниз

Вопрос по 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
4-1095617016
Dolphni1
2004-09-19 22:03
2004.10.24
desktop themes changes


1-1097420959
Саид
2004-10-10 19:09
2004.10.24
Демка браузера в Delphi.


1-1097432917
GuAV
2004-10-10 22:28
2004.10.24
Как в Excel (позднее связывание) написать формат времени ?


14-1096901158
kaZaNoVa
2004-10-04 18:45
2004.10.24
API &amp; VCL быстрее, проще, лучше !


3-1096009540
Леха
2004-09-24 11:05
2004.10.24
Как изменить значение всех строк с пом. sql