Главная страница
    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.47 MB
Время: 0.038 c
1-1097070360
Wish
2004-10-06 17:46
2004.10.24
RichEdit


14-1096142345
Verg
2004-09-25 23:59
2004.10.24
И все-таки инверсия


14-1096882862
KSergey
2004-10-04 13:41
2004.10.24
Вот тут народ правила пытается "вспомнить"...


1-1097206044
Артем К.
2004-10-08 07:27
2004.10.24
Как отобразить процесс опроса некоторого диапазона IP-адресов


6-1092212170
Coder: TCoder;
2004-08-11 12:16
2004.10.24
Indy Client





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский