Главная страница
    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.034 c
6-1092490815
Piter
2004-08-14 17:40
2004.10.24
Определение сдвига в TWebBrowser


4-1093101668
Alexis
2004-08-21 19:21
2004.10.24
Сохранение Bitmap из буфера обмена(Clipboard) в файл


1-1097482169
serg!
2004-10-11 12:09
2004.10.24
Hint для любой ячейки TDBGrid


3-1096098478
Amid
2004-09-25 11:47
2004.10.24
Firebird 1.5.0


4-1095770435
Falendysh
2004-09-21 16:40
2004.10.24
Окно теряет StayOnTop





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