Работа с двоичными данными
Модератор: Модераторы
Работа с двоичными данными
Возник вопрос, каким образом определить паскале на какой позиции стоит единица в двоичном представлении числа? Как переконвертить символ в двоичную форму?
Как сразу указать при получении данных что они идут в двоичном ввиде?
Заранее спасибо за помощь
Как сразу указать при получении данных что они идут в двоичном ввиде?
Заранее спасибо за помощь
интересно, а как данные могут передаваться не в двоичном виде? а насчет первого:
соответсвенно если a=0011b, то прога выведет 1 и 2.
Это только принцип, в реальных условиях можно придумать что-нибудь получше.
Код: Выделить всё
const
a1 = 0001b;
a2 = 0010b;
a3 = 0100b;
a4 = 1000b;
var a: integer;
begin
...
if a and a1 = a1 then showmessage('1');
if a and a2 = a2 then showmessage('2');
if a and a3 = a3 then showmessage('3');
if a and a4 = a4 then showmessage('4');
end;соответсвенно если a=0011b, то прога выведет 1 и 2.
Это только принцип, в реальных условиях можно придумать что-нибудь получше.
mr.denton писал(а):интересно, а как данные могут передаваться не в двоичном виде? а насчет первого:
Имеется ввиду в двоичном представлении. Понятно, спасибо. Только другой вариант напрашивается сам по себе - пеконвертить двоичной представление в строковое (011b->'011') и посимвольно выяснить кто на на какой позиции находится...
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Можно так:
PS: столь размытый вопрос большая редкость
Код: Выделить всё
procedure Bits(x: Integer);
// Перебор всех бит
var i: Integer;
begin
i := 1;
while x <> 0 do
begin
if (x mod 2) = 1 then ShowMessage( IntToStr(i) );
x := x div 2;
Inc(i);
end; // while
end;
function TestBit(x, i: Integer): Boolean;
// Проверка утановлен ли бит
// i - номер бита, нумерация с нуля
begin
Assert( (i >= 0) and (i < SizeOf(x)*8) );
Result := (x shl i) mod 2 = 1;
end;PS: столь размытый вопрос большая редкость
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
shade писал(а):Можно так:
[
function TestBit(x, i: Integer): Boolean;
// Проверка утановлен ли бит
// i - номер бита, нумерация с нуля
begin
Assert( (i >= 0) and (i < SizeOf(x)*8) );
Result := (x shl i) mod 2 = 1;
end;[/code]
PS: столь размытый вопрос большая редкость
В функции ошибка, по идее должно быть shr, а не shl.
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
