> Есть байт, из него нужно выдрать первые 6 битов отдельно и > последние > 2 бита отдельно, то-есть, > > Байт: 00111110 > мне нужны 001111 > и 10 отдельно,мне надо из одного байта сделать два... сделай AND с 11111100 для первых 6 бит и с 00000011 для последних 2-ух.
> > Есть байт, из него нужно выдрать первые 6 битов > отдельно и > > последние > > 2 бита отдельно, то-есть, > > > > Байт: 00111110 > > мне нужны 001111 > > и 10 отдельно,мне надо из одного байта сделать два... > сделай AND с 11111100 для первых 6 бит и с 00000011 для > последних 2-ух. Байт может быть другим (разные байты)
Хорошо поставлю вопрос так :
Как мне менять определенные биты в байте,
то-есть проверить какое значение опеределенного бита и поменять его...
> > > Есть байт, из него нужно выдрать первые 6 битов > > отдельно и > > > последние > > > 2 бита отдельно, то-есть, > > > > > > Байт: 00111110 > > > мне нужны 001111 > > > и 10 отдельно,мне надо из одного байта сделать > два... > > сделай AND с 11111100 для первых 6 бит и с 00000011 > для > > последних 2-ух. > Байт может быть другим (разные байты) Да, совершенно верно - байты бывают разные. Но, я надеюсь, общий принцип ты уловил.
> Хорошо поставлю вопрос так : > Как мне менять определенные биты в байте, > то-есть проверить какое значение опеределенного бита и > поменять его... Пример, как поменять пятый бит в байте на 1:
нужно твой байт OR с 0000100
тогда просто получая десятичное представление байта будешь иметь представление о его содержимом и о том, какое значание он должен иметь, чтобы n-й бит был другим.
И вообще, советую изучить алгоритм перевода из десятичной в двоичную и обратно - много вопросов сразу отпадет.
[Win32] или так:09.04.03 14:28 Автор: Helmet Статус: Незарегистрированный пользователь
> И вообще, советую изучить алгоритм перевода из десятичной в > двоичную и обратно - много вопросов сразу отпадет. Я прекрасно знаю эти алгоритмы и методом деления и методом возведения в степень... Не суть... Я пишу на Delphi, на асме правильно подставил маску и or сделал и все ОК, на делфи минимальная единица byte.... Я могу творить с ним логические операции, но как достучаться до опеределенного бита, у меня лажа получается... Запускаю калькулятор стандартный виндовый, смотрю число $3E после вырывания должно получиться $F, а получается у меня $3E, как и было Вот исходник:
//..............//
var
b,k,z,l:byte;
begin
b:=$3E;
showmessage(inttohex(b,2));
z:=0;
for k:=0 to 7 do
if (b and (1 shl k)) <> 0 then
z:=b or (1 shl k);
showmessage(inttohex(z,2));
//..............//
[Win32] или так:09.04.03 15:13 Автор: J'JF <Dmytro Volhushyn> Статус: Elderman Отредактировано 09.04.03 15:16 Количество правок: 1