【问题标题】:Binary to Decimal in Delphi 7Delphi 7中的二进制到十进制
【发布时间】:2019-05-09 13:05:52
【问题描述】:

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

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

这是要装箱的 dec:

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.```

【问题讨论】:

  • I/O 错误与二进制和十进制之间的转换无关。 I/O 错误与 I/O 有关。您关于 I/O 或转换的问题也是如此。要学习的重要一课是将代码分解为执行单个任务的较小部分。编写一个函数将二进制字符串转换为整数值。如果您无法使其工作,请在此处显示并寻求帮助。但就目前而言,这个问题只是要求我们为您编写代码。这不是 SO 的意义所在,它实际上对您毫无帮助。
  • 顺便说一下,您没有在二进制和十进制之间进行转换。 Integer 中保存的值实际上由机器以二进制形式表示。您正在包含数字的二进制表示的字符串和数字之间进行转换。
  • @DavidHeffernan 更多关于如何做到这一点,是的,如果不清楚,很抱歉,我说的是包含二进制到十进制的字符串(或包含该十进制的字符串)跨度>
  • 没有。您没有将二进制转换为十进制,反之亦然。考虑这一点的方法是 Integer 变量保存该值,而您的 string 变量保存该值的表示形式,十进制或二进制或十六进制或其他。在内部,Integer 实际上将值表示为二进制,但这是您几乎不需要知道的细节。
  • 至于你的问题,我在最初的评论中的建议是有效的。从代码中删除所有 I/O,编写一个函数,尝试将字符串中的二进制表示转换为 Integer 值。如果您遇到困难,请返回该代码。您在此处提供的代码执行相反的操作,因此与您所询问的问题完全无关。为了重复我自己,我们不是来为您编写代码的。请访问help center 并拨打tour。这些步骤对于您充分利用 SO 至关重要。

标签: delphi delphi-7 pascal


【解决方案1】:

位置数字系统 (PNS) 的基础知识

  • PNS 中唯一位数的数量是其基数(或基数)
    • 十进制系统(基数 = 10)有十位,0..9
    • 二进制系统(基数 = 2)有两个数字,0..1
  • 数字中数字的位置决定了它的权重:
    • 最右边的数字的权重为单位 (1), (base)^0(十进制 1,二进制 1)
    • 第二个(右起)数字的权重为(基数)^1(十进制 10,二进制 2)
    • (右起)第三个数字的权重为(基数)^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() 转换为十进制字符串。

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 2018-01-09
    • 2015-04-26
    相关资源
    最近更新 更多