Форум: "Основная";
Текущий архив: 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.009 c