Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1359822748
alexdn
2013-02-02 20:32
2013.10.27
Параллельные процессы?


15-1359569183
dmk
2013-01-30 22:06
2013.10.27
UPS или проблемы с электропитанием


1-1317227566
sniknik
2011-09-28 20:32
2013.10.27
Ситуация... Citrix and TPrinter поддержка "отображаемых"


15-1368449808
sniknik
2013-05-13 16:56
2013.10.27
Ищу книгу (/автора)...


15-1368294835
Дмитрий С
2013-05-11 21:53
2013.10.27
Почему





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский