Delphi 澄清数字格式

Delphi 澄清数字格式,delphi,signed,formatting,Delphi,Signed,Formatting,关于书中的以下代码,我有几个问题 64是打字错误吗 为什么S:=格式('%u',[-1])返回4294967295 S:=格式('It is%d',[65])将生成“It is 65”。如果这本书不是这样说的,那就是错的 S:=格式('%u',[-1])产生'4294967295',因为该数字被格式化为无符号值。有符号的-1与无符号的4294967295具有相同的位模式(它们都是十六进制的$FFFFFFFF) S:=格式('It is%d',[65])将生成“It is 65”。如果这本书不是

关于书中的以下代码,我有几个问题

  • 64是打字错误吗

  • 为什么
    S:=格式('%u',[-1])返回
    4294967295

  • S:=格式('It is%d',[65])
    将生成
    “It is 65”
    。如果这本书不是这样说的,那就是错的

  • S:=格式('%u',[-1])
    产生
    '4294967295'
    ,因为该数字被格式化为无符号值。有符号的
    -1
    与无符号的
    4294967295
    具有相同的位模式(它们都是十六进制的
    $FFFFFFFF

  • S:=格式('It is%d',[65])
    将生成
    “It is 65”
    。如果这本书不是这样说的,那就是错的

  • S:=格式('%u',[-1])
    产生
    '4294967295'
    ,因为该数字被格式化为无符号值。有符号的
    -1
    与无符号的
    4294967295
    具有相同的位模式(它们都是十六进制的
    $FFFFFFFF

  • (1) 打字错误-请看一个或多个(如果您自己发现任何其他人,我将非常感谢您的反馈)

    (2) 因为我在书中说:

    如果传递有符号整数,它将被简单地转换为无符号整数 整数。给定有符号整数的内部表示方式, 这不仅仅是从非专业人员的工作点上剥掉标志 看法例如,
    格式('%u',[-1])
    返回'4294967295',而不是'1'。如果只是 剥下标志是您想要的,然后将值传递给
    Abs
    首先是标准功能:
    格式('%u',[Abs(-1)])

    因此,以整数/Int32和基数/UInt32为例:这两种类型的实例占用32位内存。然而,在Integer/Int32的情况下,其中一个位用于记录符号(加号或减号?),而对于基数/UInt32,则没有要记录的符号;相反,相同的位用于表示比Integer/Int32所能表示的大得多的数字。因此,Int32(-1)的内部表示恰好与UInt32(4294967295)的内部表示相同

    (3) 在这种情况下,“外行人”只是“非技术人员”、“非极客”等的同义词。

    (1)打字错误-请参阅其中一个或多个(如果您自己发现任何其他人,我将非常感谢您的反馈)

    (2) 因为我在书中说:

    如果传递有符号整数,它将被简单地转换为无符号整数 整数。给定有符号整数的内部表示方式, 这不仅仅是从非专业人员的工作点上剥掉标志 看法例如,
    格式('%u',[-1])
    返回'4294967295',而不是'1'。如果只是 剥下标志是您想要的,然后将值传递给
    Abs
    首先是标准功能:
    格式('%u',[Abs(-1)])

    因此,以整数/Int32和基数/UInt32为例:这两种类型的实例占用32位内存。然而,在Integer/Int32的情况下,其中一个位用于记录符号(加号或减号?),而对于基数/UInt32,则没有要记录的符号;相反,相同的位用于表示比Integer/Int32所能表示的大得多的数字。因此,Int32(-1)的内部表示恰好与UInt32(4294967295)的内部表示相同


    (3) 在这种情况下,“外行人”只是“非技术人员”、“非极客”等的同义词。

    这里有三个问题。请一次问一个。请确保问题完整。不要引用无法链接到的资源。如果您要引用代码,请100%确定您转录的代码正确无误。问题中的代码没有编译。最后,如果你想知道“外行人”是什么意思,这是错误的网站。我建议你查字典。我把你问题的签名去掉了。问题会自动签名。你不需要,也不应该,手动操作。“因为你不清楚自己在问什么,所以暂缓?”?真是胡说八道,尽管那个完全删掉我书名的人(不是OP)帮不上忙。如果你想因为我与主题的特殊关系而忽略我的答案,那好吧,不过雷米·勒博也给出了一个非常好的答案,而且在我之前也是如此。@ChrisRolliston Close理性是假的,通常情况下也是如此。应该是“太宽”。最初的问题问了三个截然不同的问题。一次只能问一个问题。这里有三个问题。请一次问一个。请确保问题完整。不要引用无法链接到的资源。如果您要引用代码,请100%确定您转录的代码正确无误。问题中的代码没有编译。最后,如果你想知道“外行人”是什么意思,这是错误的网站。我建议你查字典。我把你问题的签名去掉了。问题会自动签名。你不需要,也不应该,手动操作。“因为你不清楚自己在问什么,所以暂缓?”?真是胡说八道,尽管那个完全删掉我书名的人(不是OP)帮不上忙。如果你想因为我与主题的特殊关系而忽略我的答案,那好吧,不过雷米·勒博也给出了一个非常好的答案,而且在我之前也是如此。@ChrisRolliston Close理性是假的,通常情况下也是如此。应该是“太宽”。最初的问题问了三个截然不同的问题。一次只能问一个问题。
    S := Format('It is %d', [65]); //assigns it to 64