Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];

Вниз

Пересылка бита из одной переменной в другую   Найти похожие ветки 

 
Evg12   (2003-06-02 12:39) [0]

Уважаемые. Можно ли каким-либо образом организовать
пересылку БИТА из одной переменной типа byte, word, integer
в другую переменную (за раннее тип одной и второй не известен)
по принципу как это делается со строковыми переменными.
str, str1: string;
str:=str[2];
То есть сделать так чтоб происходила пересылка бита в числовой переменной,
точно также, как это делается с символами в строковых переменных.

Но операция занимала минимум процессорного времени.

Сначала я собирался разложить обе переменные на биты,
переслать из одной в другую бит,
а потом собрать их опять в число и положить обратно.
Процедуру написал на ассемблере но слишком много
она времени жрет.
Особенно те части проверки размера (физически в байтах) переменных.
Нужно что-то проще и быстрее.


 
Skier   (2003-06-02 12:42) [1]

>Evg12 (02.06.03 12:39)
-Проверить установлен ли бит в первой переменной.
-Если установлен, то установить его во второй.

IMHO, не сложно...


 
Sandman25   (2003-06-02 12:44) [2]

const bit = $000800;
if source and bit
then destination := destination or bit
else destination := destination and not bit;
?


 
Anatoly Podgoretsky   (2003-06-02 12:47) [3]

Ничего заранее проверять не нужно, использовать сразу NOT/AND/OR


 
DrPass   (2003-06-02 12:51) [4]

Еще проще:
destination:=(destination and $FFF7FF) or (source and $800))


 
kull   (2003-06-02 13:05) [5]

Напиши отдельную функцию и положи ее себе в какую нибудь библиотеку для дальнейшего пользования. Чтоб было на все случаи жизни... А не на один раз. И чтоб потом не заниматься галиматьей вроде - "a and $800".

Например:

function SetBit(const Source, BitNumber: Integer;
const SetUp: Boolean): Integer;
begin
Result := Source and not (1 shl BitNumber) or (Integer(SetUp) shl BitNumber);
end;


 
Evg12   (2003-06-02 13:20) [6]

To kull: Спасибо. Это именно то что мне было нужно.
Я вот какраз и не захотел заниматься галиматьей, как ты сказал и написал в конфу.


 
VaS   (2003-06-02 13:24) [7]

Функция хорошая, да только понимания сдвиговых операций г-ну Evg12 она не дала.


 
kull   (2003-06-02 13:27) [8]


> VaS © (02.06.03 13:24)

Да, могет быть...
Да я... Да я... Да я хотел в принципе сказать, что подобные вещи нужно записывать в библиотечные функции... :)


 
Skier   (2003-06-02 13:36) [9]

Можно ещё так изобразить (как вариант) :

function TurnBitOn(const AValue, ABit : Byte) : Byte; assembler;
asm
MOV AL, AValue
BTS EAX, ABit
end;


 
Anatoly Podgoretsky   (2003-06-02 13:38) [10]

Базовые логические операции не могут являться галиматьей.


 
kull   (2003-06-02 14:59) [11]


> Anatoly Podgoretsky © (02.06.03 13:38)

Галиматьей могут стать еще более базовые вещи, если не пытаться сделать свой код более гибким, модифицируемым и т.п.


 
Evg12   (2003-06-03 13:48) [12]

to kull ©, VaS © и другим, может пригодится.

Функция пересылки бита из одной переменной в другую.
Модифицированный мной варивнт функции SetBit от kull © Результатом функции является модифицированная переменная Target

function TForm1.SendBit(Source, SourceBitNumber, Target, TargetBitNumber: Integer): Integer;
begin
Result := Target and not (1 shl TargetBitNumber) or (((Source and (1 shl SourceBitNumber)) shr SourceBitNumber) shl TargetBitNumber);

Спасибо всем. тема закрыта.

end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.006 c
14-50441
Cossys
2003-05-29 11:38
2003.06.16
Под W2000 не пашет Прога, откомпилированая под НТ


14-50503
Scorpx
2003-05-31 10:07
2003.06.16
Анкета


14-50493
N169
2003-05-30 11:26
2003.06.16
Солнечное затмение


1-50288
killer
2003-06-04 16:10
2003.06.16
Как в Image убрать фон картинки?


8-50410
sashok
2003-03-04 18:17
2003.06.16
Работа с файлами графики





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