这个sprintf调用是否在1.9.2中被破坏了?

时间:2011-01-01 02:14:13

标签: ruby

Kernel#sprintf文档的底部,它有这个例子:

sprintf("%u", -123) #=> "..4294967173"

当我在1.8.7上执行此操作时,我得到了这个结果:

"..18446744073709551493"

与预期输出的类似,但绝对不是它。

然而,当我在1.9.2上执行此操作时,我得到的字符串相同:

ruby-1.9.2-p136 :001 > sprintf("%u", -123)
 => "-123"

所以这里实际上有两个问题。

  1. 为什么我会根据文档中的说法获得不同的输出

  2. 为什么Ruby 1.9.2的行为与1.8.7不同,即使文档对输出类型非常具体?

1 个答案:

答案 0 :(得分:5)

1.8 documentation表示%u用于32位无符号整数,并且您在64位无符号整数上看到它,因此该行为已关闭。 1.9 documentation表示%u%d相同,因此行为正确。