Главная страница
    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.005 c
14-50468
sunwheel
2003-05-29 17:15
2003.06.16
Блок-схема


14-50495
Axis_of_Evil
2003-05-30 14:06
2003.06.16
Indy, FastNet etc


4-50564
}{enon
2003-04-17 17:32
2003.06.16
Как получить название кнопки?


3-50247
YuraKiller
2003-05-22 21:45
2003.06.16
Где выкачать FB?


6-50423
Reals
2003-04-10 15:30
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский