二进制到十进制在Delphi 7中

时间:2019-05-09 13:05:53

标签: delphi delphi-7 pascal

我正在尝试做一个简单的控制台程序,用户输入一个二进制字符串,然后他得到一个十进制数。我不需要检查二进制字符串是否具有非0或1的值。我已经设法将十进制转换为二进制,但是不能用其他方式做到这一点。

我尝试了一些在SO和Reddit上找到的代码,但是大多数时候我遇到错误I / O 105

这是要分档的十进制:

program dectobin;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Crt32;

var
 d,a :Integer;
 str :String;

begin
   str:='';
   Readln(a);
   while a>0 do begin
    d:=a mod 2;
    str:=concat(IntToStr(d),str);
    a:=a div 2;
  end;
  Writeln(str);
  Readln;
end.```

1 个答案:

答案 0 :(得分:0)

位置编号系统(PNS)的基础

  • PNS中唯一数字的位数是其基数(或基数)
    • 十进制(基数= 10)有十个数字,0..9
    • 二进制系统(基数= 2)有两个数字,即0..1
  • 数字在数字中的位置决定其权重:
    • 最右边的数字的权重单位为(1)(基数)^ 0(十进制1,二进制1)
    • 第二个(从右至右)数字的权重为(base)^ 1(十进制10,二进制2)
    • 第三个(从右至右)数字的权重为(base)^ 2(十进制100,二进制4)
    • 依此类推....

请注意,权重始终为base * weight of previous digit(从右到左方向)

在任何位置数字系统中对一串数字的一般解释

  assign a variable 'result' = 0
  assign a variable 'weight' = 1 (for (base)^0 )
  repeat
    read the rightmost (not yet read) digit from string
    convert digit from character to integer
    multiply it by weight and add to variable 'result'
    multiply weight by base in prep. for next digit
  until no more digits

在上一个之后,您可以使用例如IntToStr()转换为十进制字符串。