Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.10.27;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.01 c
15-1368014800
Jeer
2013-05-08 16:06
2013.10.27
С Праздником Победы!


2-1359636319
Scott Storch
2013-01-31 16:45
2013.10.27
Где взять координаты домов всех улиц населенных пунктов


15-1368261134
Jeer
2013-05-11 12:32
2013.10.27
ПО "Буран"


2-1359654647
berrimor
2013-01-31 21:50
2013.10.27
координаты второго монитора


2-1359379919
Наталья
2013-01-28 17:31
2013.10.27
dec->bin