Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.039 c
1-1097215485
MegaVolt
2004-10-08 10:04
2004.10.24
Как отрисовать кусочек TMetaFileCanvas?


4-1095421090
don
2004-09-17 15:38
2004.10.24
Как открыть диалог FileOpen с возможностью просмотра картинок


3-1096309007
Denisov
2004-09-27 22:16
2004.10.24
Работа с BLOB.


3-1096265024
MakNik
2004-09-27 10:03
2004.10.24
Аналог ф-ции NewID()


1-1097351465
3J106UH
2004-10-09 23:51
2004.10.24
строки memo





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский