为什么第一个Integer 2147483648?

时间:2017-12-17 20:18:44

标签: integer ada

我正在努力学习阿达,这让我感到惊讶。

该计划的输出:

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

procedure Main is

function lstrip(S: String) return String is
begin
    return S(S'First+1 .. S'Last);
end;

function "&"(Left: String; Right: Integer) return String is
begin
    return Left & lstrip(Integer'Image(Right));
end "&";

function "&"(Left: Integer; Right: String) return String is
begin
    return lstrip(Integer'Image(Left)) & Right;
end "&";

begin
   Put_Line("Integer'First=" & Integer'First);
   Put_Line("Integer'Last=" & Integer'Last);
end Main;

这是:

Integer'First=2147483648
Integer'Last=2147483647

但为什么Integer'First大于Integer'Last?我希望它是一个负数。

1 个答案:

答案 0 :(得分:4)

  

为什么第一个整数是2147483648?

不是。

您的lstrip函数会删除其参数的第一个字符。

Integer'Image(Integer'First)返回"-2147483648"。您的lstrip功能会将其更改为"2147483648"

看起来你正试图删除Integer'Image添加的领先空间(我总是发现自己烦恼)。但Integer'Image仅为非负数增加了领先空间。试试这个版本的lstrip

function lstrip(S: String) return String is
begin
    if S(S'First) = ' ' then
        return S(S'First+1 .. S'Last);
    else
        return S;
    end if;
end;

请注意,-2147483648Integer'First的一个非常常见的值,但标准只保证它不超过-32767