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”。如果这本书不是
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
)格式('%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