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

Rya*_*igg 2 ruby

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

sprintf("%u", -123) #=> "..4294967173"
Run Code Online (Sandbox Code Playgroud)

当我在1.8.7上执行此操作时,我得到以下结果:

"..18446744073709551493"
Run Code Online (Sandbox Code Playgroud)

预期产量相似,但绝对不是.

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

ruby-1.9.2-p136 :001 > sprintf("%u", -123)
 => "-123"
Run Code Online (Sandbox Code Playgroud)

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

  1. 为什么我会得到不同的输出文件说我会和

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

Ign*_*ams 5

1.8文档说,%u是一个32位无符号整数,你看到它在64位无符号整数,这样的行为是关闭的.该1.9文档%u是一样的%d,这样的行为是正确的.