Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

dec->bin [D7]


Страницы:   1 2 3 4

Наталья ©   (2013-01-28 17:31:00) 

Из dec->hex:
Format('%.0x',[DEC]);

а в двоичную систему через Format можно?


Игорь Шевченко   (2013-01-29 14:34:00) [41]

Ega23 ©   (29.01.13 13:21) [14]


> array[False..True]


Ужос на крыльях ночи. Напиши array[Boolean] и не порть людям голову :)


Ega23   (2013-01-29 14:33:00) [42]


> Нельзя использовать -1 для беззнаковых чисел, как и : Integer

Какая разница? Есть число. Число представлено в виде набора нулей и единиц. Какая половая разница, как оно там "выше" трактуется, как "4294967295" или как "-1"? Один фиг это 32 единицы.


Jeer   (2013-01-29 14:32:00) [43]

Удалено модератором


Ega23   (2013-01-29 14:30:00) [44]


> Калькуляторы разные наверно.

стандартный calc.exe
Ну да ладно, можешь упорствовать дальше, ненаказуемо. Я в [14] уже сказал всё что хотел.


aka   (2013-01-29 14:30:00) [45]


> Jeer ©   (29.01.13 14:28) [22]


Мы вообще щас писать будет из десятичной в произвольную.


Anatoly Podgoretsky   (2013-01-29 14:29:00) [46]


> Неверно. "-1" у Integer - это 32 единицы.

Нельзя использовать -1 для беззнаковых чисел, как и : Integer

BINary вообще то беззнаковое


Jeer   (2013-01-29 14:28:00) [47]


> aka   (29.01.13 12:43) [11]
>
>
> > Jeer ©   (29.01.13 12:40) [9]
>
>
> Стандартной из 10 в 2 нет.


С логикой плохо?
Приведены стандартные функции, т.к. Наталье до самописных далеко.


aka   (2013-01-29 14:20:00) [48]


> А, я кажется понял. После ввода "-1" равенство нажми. И
> уже потом в bin.


нажму "="  получится "0", а 0 в 0 = 0.


> > И? Вызывают стандартный вин-калькулятор, ввожу "-1", перевожу
> > в Bin - вижу "0"
>
> Я вижу кучу единиц. Что я делаю не так?


Калькуляторы разные наверно.


Ega23   (2013-01-29 14:00:00) [49]


> И? Вызывают стандартный вин-калькулятор, ввожу "-1", перевожу
> в Bin - вижу "0"


А, я кажется понял. После ввода "-1" равенство нажми. И уже потом в bin.


Ega23   (2013-01-29 14:00:00) [50]


> Функция вообще для положительных целых.

У тебя либо 0, либо единица. То, что у знаковых целых первый бит за знак отвечает не означает того, что он перестал быть нулём или единицей.


> И? Вызывают стандартный вин-калькулятор, ввожу "-1", перевожу
> в Bin - вижу "0"

Я вижу кучу единиц. Что я делаю не так?


aka   (2013-01-29 13:57:00) [51]


> Ega23 ©   (29.01.13 13:53) [17]


Функция вообще для положительных целых.

И? Вызывают стандартный вин-калькулятор, ввожу "-1", перевожу в Bin - вижу "0"


Ega23   (2013-01-29 13:53:00) [52]


> aka   (29.01.13 13:48) [16]


И? Вот я вызываю твою функцию:

Label1.Caption := DecToBin(-1, 0);
Я вижу "0". А должен увидеть 32 единицы (для 32-х разрядов, естественно).


aka   (2013-01-29 13:48:00) [53]

if Dec <= 0 then
 begin
   Result := '0' + StringOfChar('0', Capacity-1);
   Exit;
 end;


Ega23   (2013-01-29 13:38:00) [54]


> aka   (29.01.13 13:18) [13]

>   if Dec <= 0 then
>   begin
>     Result := StringOfChar('0', Capacity);
>     Exit;
>   end;


Неверно. "-1" у Integer - это 32 единицы.


Ega23   (2013-01-29 13:21:00) [55]


> А как с ведущими нулями сделать?


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;


aka   (2013-01-29 13:18:00) [56]


> Наталья   (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;


Наталья   (2013-01-29 13:10:00) [57]


> aka   (29.01.13 12:42) [10]


А как с ведущими нулями сделать?


aka   (2013-01-29 12:43:00) [58]


> Jeer ©   (29.01.13 12:40) [9]


Стандартной из 10 в 2 нет.


aka   (2013-01-29 12:42:00) [59]


> Наталья   (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;


Jeer   (2013-01-29 12:40:00) [60]


> В чем смысл операции?


В использовании стандартных функций.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо