![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
двоичное представление числа
Галинка © (2007-10-30 17:58:00)Решение "в лоб":
для целого:
заводим массив символов длинной 32. Инициализируем все элементы нулями. Остатки от целочесленного деления исходного числа на 2 заносим в обратной последовательности в массив. Выводим массив в нормальном порядке (отметая вывод всех полных "нулевых" байтов).
но это в лоб. Ведь число же и так представлено двоично в компе. Может можно как-то шифтом или масками?
vr-online (2007-10-31 20:21:00) [1]
> Не надо в цитаты включать отсебятину. хорошо :)
Anatoly Podgoretsky (2007-10-31 19:28:00) [2]Не надо в цитаты включать отсебятину.
vr-online (2007-10-31 17:31:00) [3]
> Anatoly Podgoretsky © (31.10.07 16:41)
> Здесь таких нет - ах если бы
Эх.. зря ты так думаешь...
Anatoly Podgoretsky (2007-10-31 16:41:00) [4]> vr-online (31.10.2007 16:24:33) [33]
Здесь таких нет
vr-online (2007-10-31 16:24:00) [5]НОВЫЙ ВАРИАНТ!!! ВНИМАНИЕ!!! ТОЛЬКО ДЛЯ ИЗВРЩЕНЦОВ!!!
procedure TForm1.Button1Click(Sender: TObject);
var
i1, i2, i3, i4, i5 : integer;
i6, i7, i8, i9, i10 : integer;
i11, i12, i13, i14, i15 : integer;
i16 : integer;
k : integer;
str: string;
begin
k:=-1;
for i1:= 0 to 1 do
for i2:= 0 to 1 do
for i3:= 0 to 1 do
for i4:= 0 to 1 do
for i5:= 0 to 1 do
for i6:= 0 to 1 do
for i7:= 0 to 1 do
for i8:= 0 to 1 do
for i9:= 0 to 1 do
for i10:= 0 to 1 do
for i11:= 0 to 1 do
for i12:= 0 to 1 do
for i13:= 0 to 1 do
for i14:= 0 to 1 do
for i15:= 0 to 1 do
for i16:= 0 to 1 do
begin
k:=k+1;
str:=IntToStr(i1)+IntToStr(i2)+
IntToStr(i3)+IntToStr(i4)+
IntToStr(i5)+IntToStr(i6)+
IntToStr(i7)+IntToStr(i8)+
IntToStr(i9)+IntToStr(i10)+
IntToStr(i11)+IntToStr(i12)+
IntToStr(i13)+IntToStr(i14)+
IntToStr(i15)+IntToStr(i16);
if pos('0',str)<>0 then
delete(str,pos('0',str), pos('1',str)-1);
memo1.Lines.Add(IntToStr(k)+': ' + str);
end;
end;
Dimaxx (2007-10-31 13:23:00) [6]
> так строка есть массив символов )) Т.е. все равно в массив.
>
> Я думала в таком ключе, типа шифтом сдвигать в право и рассматривать
> последний бит? Или что-то в этом роде ))
Ты опиши точнее - что тебе требуется сделать. Если простая проверка, так проще одной строкой.
if (Num and (1 shl I))<>0 then S:="1" else S:="0";
Проверяется I-тый бит в Num.
Anatoly Podgoretsky (2007-10-31 13:05:00) [7]
> vr-online © (31.10.07 03:23) [21]
Неужели в 2 гб не поместится?
Leonid Troyanovsky (2007-10-31 11:25:00) [8]
> Галинка © (31.10.07 10:43) [24]
> Я думала в таком ключе, типа шифтом сдвигать в право и рассматривать
> последний бит? Или что-то в этом роде ))
procedure WriteByteToStr(const b: Byte; buf: PChar);
const
bs: array [0..$F] of PChar =
(
'0000', '0001', '0010', '0011',
'0100', '0101', '0110', '0111',
'1000', '1001', '1010', '1011',
'1100', '1101', '1110', '1111'
);
begin
Move(bs[b and $F]^, buf[4], 4);
Move(bs[b shr 04]^, buf[0], 4);
end;
function BitsToStr(p: PChar; count: Cardinal; Invert: Boolean): String;
var
i, a: Longint;
pbase: PChar;
begin
if Invert then
begin
pbase := p + count - 1;
a := -1;
end
else
begin
pbase := p;
a := 1;
end;
SetLength(Result, count*8);
for i := 0 to count - 1 do
WriteByteToStr(PByte(pbase + a*i)^, @Result[i*8 + 1]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
L: Longint;
begin
L := StrToInt(Edit1.Text);
Caption := BitsToStr(@L, 4, True);
end;
Не тестировалось.
--
Regards, LVT.
Галинка (2007-10-31 11:02:00) [9]Dennis I. Komarov © (31.10.07 10:57) [28]
да я не против. Просто инетерсно ))
Dennis I. Komarov (2007-10-31 10:57:00) [10]> [27] Галинка © (31.10.07 10:54)
Тебе легче от того, что ты знаешь как оно храниться? Я говорил не про число, а про его представление.
Галинка (2007-10-31 10:54:00) [11]Dennis I. Komarov © (31.10.07 10:45) [25]
так оно и так в двоичном хранится. Как сазать что его не надо тавойт... в десятичное ((
Ins (2007-10-31 10:53:00) [12]
> Сначало надо придумать как хранить в памяти
Уже ;-)
Dennis I. Komarov (2007-10-31 10:45:00) [13]> [24] Галинка © (31.10.07 10:43)
Ну так а хранить двоичное предстваление числа где?
Галинка (2007-10-31 10:43:00) [14]Dimaxx © (31.10.07 02:31) [15]
так строка есть массив символов )) Т.е. все равно в массив.
Я думала в таком ключе, типа шифтом сдвигать в право и рассматривать последний бит? Или что-то в этом роде ))
Virgo_Style (2007-10-31 06:19:00) [15]vr-online © (31.10.07 3:23) [21]
архитектура
Чья архитектура не позволяет, архитектура программиста, что ли?
vr-online (2007-10-31 03:26:00) [16]Ну вот на листке бумаги ты как из двоичной в десятичную и обратно переводишь? Всем известный метод деления и записи наоборот - это не единственный вариант. В инете есть еще какие-то. Знаю есть метод дракона работающий с помощю собок. и интересуюсь кто еще и какие методы знает.
vr-online (2007-10-31 03:23:00) [17]Кому лучше перейти, а кому-то лучше просто подумать. Просто представь что тебе надо перевести из десятичной в двоичну огромное такое число, а архитектура не позволяет, ну может она, то как быть?
Германн (2007-10-31 03:21:00) [18]
> vr-online © (31.10.07 03:03) [18]
>
> Кстати а вот кто какие варианты перевода из десятичной в
> двоичную знает? Все возможные варианты.
>
А какие возможны варианты, если твой вопрос непонятен?
Германн (2007-10-31 03:16:00) [19]
> Ты прав надо придумать как хранить! А вот если нет вариантов?
> То что? Знаете?
Есл нет вариантов, то лучше перейти в offline. :)
vr-online (2007-10-31 03:03:00) [20]Кстати а вот кто какие варианты перевода из десятичной в двоичную знает? Все возможные варианты.