![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Битовая логика
Thesis © (2010-03-15 15:02:00)есть переменная типа Word. как для установить первый бит этой переменной в 1?
Юрий Зотов (2010-03-16 14:37:00) [1]
> Thesis (16.03.10 12:53) [24]
Этого не может быть, проверяйте внимательнее.
Германн (2010-03-16 14:35:00) [2]
> можно что-нибудь сделать чтобы такие числа проходили.
Учиться, учиться и еще раз учиться! Учить битовую логику.
Thesis (2010-03-16 13:10:00) [3]можно что-нибудь сделать чтобы такие числа проходили.
Игорь Шевченко (2010-03-16 13:06:00) [4]
> для числа D := 368309 получается неверный результат. почему?
Число неудачное
Thesis (2010-03-16 12:53:00) [5]для числа
D := 368309получается неверный результат. почему?
Юрий Зотов (2010-03-16 12:15:00) [6]> Thesis (16.03.10 11:57) [16]
project Project1;
{$APPTYPE CONSOLE}
uses
Windows;
var
D: DWord; // Беззнаковое 4-байтное целое
W: packed array[1..2] of Word absolute D; // D и W имеют общий адрес
begin
D := что-нибудь; // Теперь W[1] и W[2] содержат 2-байтовые значения
WriteLn('Исходное значение: ', D);
W[1] := W[1] or $8000; // Установили старший бит, результат - в D
WriteLn('Установленный старший бит: ', D);
W[1] := W[1] and $7FFF; // Сбросили старший бит, результат - в D
WriteLn('Сброшенный старший бит: ', D);
ReadLn
end;
Anatoly Podgoretsky (2010-03-16 12:10:00) [7]> oldman (16.03.2010 12:05:19) [19]
Голова!
oldman (2010-03-16 12:08:00) [8]
> Thesis (16.03.10 12:07) [20]
Просто возникает вопрос - зачем для установки бита разбирать и собирать переменную.
Похоже на институтские задачки.
Thesis (2010-03-16 12:07:00) [9]
> курсовик?
нет, хочу разобраться с битовой логикой, задачу нашел в одной из книжек по паскалю, показалась интересной.
oldman (2010-03-16 12:05:00) [10]
> задача у меня токова: есть 4-х байтовое значение. нужно
> разбить его на 2 двухбайтовых, для 1-го полученного 2-х
> байтового значения установить / сбросить старший бит (1).
> собрать из двухбайтовых значение первоначальное однобайтовое.
>
курсовик?
Anatoly Podgoretsky (2010-03-16 12:03:00) [11]> Thesis (16.03.2010 11:57:16) [16]
Так нет отдельных статей, по работе с дух байтами и с одним байтом и также с другим количеством байт.
Как нет курсов вождения на третей скорости.
Thesis (2010-03-16 11:58:00) [12]
> собрать из двухбайтовых значение первоначальное однобайтовое
сорри, собрать из двухбайтовых значение первоначальное четырехбайтовое
Thesis (2010-03-16 11:57:00) [13]читал, но там описана работа 4-х байтовой переменной. тема для меня совершенно новая поэтому торможу.
задача у меня токова: есть 4-х байтовое значение. нужно разбить его на 2 двухбайтовых, для 1-го полученного 2-х байтового значения установить / сбросить старший бит (1). собрать из двухбайтовых значение первоначальное однобайтовое.
Попытался разобраться самостоятельно, вот что получилось (работает неправильно):
N := 70286;
W1 := N and $FFFF;
W2 := (N and $FFFF0000) shr 16;
W1 := W1 or $80;
try
if W1 and $80 <> 0 then
ShowMessage('1')
else
ShowMessage('0');
finally
W1 := W1 and ($FF xor $80);
end;
Res := W1 or (W2 shl 16);
ShowMessage(IntToStr(Res));
Anatoly Podgoretsky (2010-03-16 11:46:00) [14]> Thesis (16.03.2010 11:32:14) [14]
Ты статью читал?
Thesis (2010-03-16 11:32:00) [15]с этим ясно, спасибо.
а как правильно сбрасывать. Пытаюсь делать так:
W1 := W1 and ($FF xor $80);
Anatoly Podgoretsky (2010-03-16 11:30:00) [16]Word or MSB;
Thesis (2010-03-16 11:25:00) [17]в моем случае речь идет о старшем бите
а почему $80 а не $8000?
> May be Word or $80;
Anatoly Podgoretsky (2010-03-16 08:43:00) [18]
> Одну букву ты забыл. :)
Мои пчелы.
Германн (2010-03-16 01:57:00) [19]
> antonn © (16.03.10 01:46) [9]
"Какая гадость...
Какая гадость эта ваша заливная рыба"
(с)
antonn (2010-03-16 01:46:00) [20]"мое пиво"? =)