在Kernel#sprintf文档的底部,它有这个例子:
sprintf("%u", -123) #=> "..4294967173"
当我在1.8.7上执行此操作时,我得到了这个结果:
"..18446744073709551493"
与预期输出的类似,但绝对不是它。
然而,当我在1.9.2上执行此操作时,我得到的字符串相同:
ruby-1.9.2-p136 :001 > sprintf("%u", -123)
=> "-123"
所以这里实际上有两个问题。
为什么我会根据文档中的说法获得不同的输出
答案 0 :(得分:5)
1.8 documentation表示%u
用于32位无符号整数,并且您在64位无符号整数上看到它,因此该行为已关闭。 1.9 documentation表示%u
与%d
相同,因此行为正确。