Форум: "Начинающим";
Текущий архив: 2013.10.27;
Скачать: [xml.tar.bz2];
Внизdec->bin Найти похожие ветки
← →
Наталья (2013-01-28 17:31) [0]Из dec->hex:
Format("%.0x",[DEC]);
а в двоичную систему через Format можно?
← →
Сергей М. © (2013-01-28 17:51) [1]Нельзя
← →
Dennis I. Komarov © (2013-01-28 20:59) [2]Зачем?
← →
Jeer © (2013-01-28 23:55) [3]IntToHex() - > HexToBin()
← →
ALS (2013-01-29 09:47) [4]function _ltoa (Value: Integer; Buffer: PChar; Radix: Integer): PChar; cdecl; external "ntdll.dll" name "_ltoa";
function Int2Str(Data: integer; Radix: integer = 2): string;
var Buffer: array[0..32] of char;
begin
Result := _ltoa(Data, Buffer, Radix)
end;
← →
megavoid © (2013-01-29 10:06) [5]Я за [3], а то представляю, сейчас Наталья как принесёт преподу cdecl; external ntdll.dll :)
← →
brother © (2013-01-29 10:08) [6]> Наталья как принесёт преподу cdecl; external ntdll.dll
а у того линух)
← →
Anatoly Pogoretsky (2013-01-29 10:31) [7]> brother (29.01.2013 10:08:06) [6]
Лопух правильное
написание
← →
ALS (2013-01-29 11:15) [8]Jeer © (28.01.13 23:55) [3]
IntToHex() - > HexToBin()
В чем смысл операции?
Получить в результате число, которое запровлялось в IntToHex() ???
Бинарное значение у автора есть (DEC), требуется строка
← →
Jeer © (2013-01-29 12:40) [9]
> В чем смысл операции?
В использовании стандартных функций.
← →
aka (2013-01-29 12:42) [10]
> Наталья (28.01.13 17:31)
>
> Из dec->hex:
> Format("%.0x",[DEC]);
>
> а в двоичную систему через Format можно?
dec->bin
вот моя самописная:
function TMainForm.DecToBin(Dec: Integer): String;
var
Res,i,j: Integer;
Dest: array[0..255] of Char;
Buf: Char;
begin
if Dec <= 0 then
begin
Result := "0";
Exit;
end;
i := -1;
Res := Dec;
while Res > 0 do
begin
Inc(i);
if (Res mod 2) = 0 then Dest[i] := "0"
else Dest[i] := "1";
Res := Res div 2;
end;
for j := 0 to (i div 2) do
begin
Buf := Dest[j];
Dest[j] := Dest[i-j];
Dest[i-j] := Buf;
end;
Result := Copy(Dest,0,i+1);
end;
← →
aka (2013-01-29 12:43) [11]
> Jeer © (29.01.13 12:40) [9]
Стандартной из 10 в 2 нет.
← →
Наталья (2013-01-29 13:10) [12]
> aka (29.01.13 12:42) [10]
А как с ведущими нулями сделать?
← →
aka (2013-01-29 13:18) [13]
> Наталья (29.01.13 13:10) [12]
>
>
> > aka (29.01.13 12:42) [10]
>
>
> А как с ведущими нулями сделать?
через установку Capacity, если не нужно, то Capacity <= 0
function TMainForm.DecToBin(Dec: Integer; Capacity: Integer): String;
var
Res,i,j: Integer;
Dest: array[0..255] of Char;
Buf: Char;
begin
if Dec <= 0 then
begin
Result := StringOfChar("0", Capacity);
Exit;
end;
i := -1;
Res := Dec;
while Res > 0 do
begin
Inc(i);
if (Res mod 2) = 0 then Dest[i] := "0"
else Dest[i] := "1";
Res := Res div 2;
end;
for j := 0 to (i div 2) do
begin
Buf := Dest[j];
Dest[j] := Dest[i-j];
Dest[i-j] := Buf;
end;
Result := StringOfChar("0", Capacity-(i+1)) + Copy(Dest,0,i+1);
end;
← →
Ega23 © (2013-01-29 13:21) [14]
> А как с ведущими нулями сделать?
function IntToBin(Value: Integer): string;
var
i: Integer;
const
cDigit: array[False..True] of Char = ("0", "1");
cSize = SizeOf(Integer) * 8;
begin
SetLength(Result, cSize);
for i := 0 to cSize - 1 do
Result[cSize - i] := cDigit[((Value shr i) and 1) = 1];
end;
← →
Ega23 © (2013-01-29 13:38) [15]
> aka (29.01.13 13:18) [13]
> if Dec <= 0 then
> begin
> Result := StringOfChar("0", Capacity);
> Exit;
> end;
Неверно. "-1" у Integer - это 32 единицы.
← →
aka (2013-01-29 13:48) [16]if Dec <= 0 then
begin
Result := "0" + StringOfChar("0", Capacity-1);
Exit;
end;
← →
Ega23 © (2013-01-29 13:53) [17]
> aka (29.01.13 13:48) [16]
И? Вот я вызываю твою функцию:Label1.Caption := DecToBin(-1, 0);
Я вижу "0". А должен увидеть 32 единицы (для 32-х разрядов, естественно).
← →
aka (2013-01-29 13:57) [18]
> Ega23 © (29.01.13 13:53) [17]
Функция вообще для положительных целых.
И? Вызывают стандартный вин-калькулятор, ввожу "-1", перевожу в Bin - вижу "0"
← →
Ega23 © (2013-01-29 14:00) [19]
> Функция вообще для положительных целых.
У тебя либо 0, либо единица. То, что у знаковых целых первый бит за знак отвечает не означает того, что он перестал быть нулём или единицей.
> И? Вызывают стандартный вин-калькулятор, ввожу "-1", перевожу
> в Bin - вижу "0"
Я вижу кучу единиц. Что я делаю не так?
← →
Ega23 © (2013-01-29 14:00) [20]
> И? Вызывают стандартный вин-калькулятор, ввожу "-1", перевожу
> в Bin - вижу "0"
А, я кажется понял. После ввода "-1" равенство нажми. И уже потом в bin.
← →
aka (2013-01-29 14:20) [21]
> А, я кажется понял. После ввода "-1" равенство нажми. И
> уже потом в bin.
нажму "=" получится "0", а 0 в 0 = 0.
> > И? Вызывают стандартный вин-калькулятор, ввожу "-1", перевожу
> > в Bin - вижу "0"
>
> Я вижу кучу единиц. Что я делаю не так?
Калькуляторы разные наверно.
← →
Jeer © (2013-01-29 14:28) [22]
> aka (29.01.13 12:43) [11]
>
>
> > Jeer © (29.01.13 12:40) [9]
>
>
> Стандартной из 10 в 2 нет.
С логикой плохо?
Приведены стандартные функции, т.к. Наталье до самописных далеко.
← →
Anatoly Podgoretsky © (2013-01-29 14:29) [23]
> Неверно. "-1" у Integer - это 32 единицы.
Нельзя использовать -1 для беззнаковых чисел, как и : Integer
BINary вообще то беззнаковое
← →
aka (2013-01-29 14:30) [24]
> Jeer © (29.01.13 14:28) [22]
Мы вообще щас писать будет из десятичной в произвольную.
← →
Ega23 © (2013-01-29 14:30) [25]
> Калькуляторы разные наверно.
стандартный calc.exe
Ну да ладно, можешь упорствовать дальше, ненаказуемо. Я в [14] уже сказал всё что хотел.
← →
Jeer © (2013-01-29 14:32) [26]Удалено модератором
← →
Ega23 © (2013-01-29 14:33) [27]
> Нельзя использовать -1 для беззнаковых чисел, как и : Integer
Какая разница? Есть число. Число представлено в виде набора нулей и единиц. Какая половая разница, как оно там "выше" трактуется, как "4294967295" или как "-1"? Один фиг это 32 единицы.
← →
Игорь Шевченко © (2013-01-29 14:34) [28]Ega23 © (29.01.13 13:21) [14]
> array[False..True]
Ужос на крыльях ночи. Напиши array[Boolean] и не порть людям голову :)
← →
aka (2013-01-29 14:35) [29]
> Ega23 © (29.01.13 14:30) [25]
Так если мы переводим "-1" из десятичной в двоичную, то какой ответ?
← →
Ega23 © (2013-01-29 14:38) [30]
> Ужос на крыльях ночи. Напиши array[Boolean] и не порть людям
> голову :)
Да я вот чё-та забываю всё время, кто у них там первый, True или False. Несколько раз накололся, когда местами менял, потом плюнул слюной и уже чётко пишу, что именно
Кстати, там вообще можно такcDigit: array[0..1] of Char = ("0", "1");
Result[cSize - i] := cDigit[(Value shr i) and 1];
← →
Ega23 © (2013-01-29 14:43) [31]
> Так если мы переводим "-1" из десятичной в двоичную, то
> какой ответ?
На, смотри:
http://ega23.narod.ru/pix/calc.png
← →
Плохиш © (2013-01-29 14:46) [32]
> Так если мы переводим "-1" из десятичной в двоичную, то
> какой ответ?
Много единиц.
← →
RWolf © (2013-01-29 14:49) [33]
> Да я вот чё-та забываю всё время, кто у них там первый,
> True или False.
Правда выше лжи, очевидно же.
← →
Игорь Шевченко © (2013-01-29 14:50) [34]Ega23 © (29.01.13 14:38) [30]
Сейчас придет Sha и скажет
← →
Ega23 © (2013-01-29 14:51) [35]
> Правда выше лжи, очевидно же.
Я с вероятностью в 70% в циклеwhile not DataSet.Eof do
begin
...
end;
забываю DataSet.Next поставить. Вот забываю и всё, хоть убей. Оно понятно, что сразу отлавливается, но тем не менее.
Тут - ровно то же самое.
← →
Ega23 © (2013-01-29 14:53) [36]
> Сейчас придет Sha и скажет
Само-собой, щас ещё Розыч начнёт выступать :))
← →
Anatoly Pogoretsky (2013-01-29 15:02) [37]> Ega23 (29.01.2013 14:33:27) [27]
Для без знакового будет
ерунда, а для знакового
ошибка,
В общему будет плохо
← →
Anatoly Pogoretsky (2013-01-29 15:04) [38]> Ega23 (29.01.2013 14:43:31) [31]
Калькулятор он разумный,
не в пример программерам, а
этот особо разумный,
работает с 2^128
← →
Anatoly Pogoretsky (2013-01-29 15:05) [39]> Игорь Шевченко (29.01.2013 14:50:34) [34]
А может по шапке надоет
← →
Anatoly Pogoretsky (2013-01-29 15:07) [40]> Ega23 (29.01.2013 14:51:35) [35]
False всегда НОЛЬ, а прочих
много, но правило True not False (not
логический)
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.10.27;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.003 c