2014-05-06 24 views
4

一些端子输出是胜过千言万语那么让我们开始与:在ruby中定义二进制数字的语法是什么?

[10] pry(main)> 1_000 
=> 1000 

是的,我们可以在一个红宝石可读的方式定义成千上万,我知道,和万物的罚款。嘿,我想知道如果我试着用零填充左边的垫子会发生什么?

嗯,这很奇怪,这不是二进制因为这将是8嗯......

[20] pry(main)> 01_0 
=> 8 

所以这是8 ...... OK,2 ** 3是8,2 **(3 * 3)512我敢打赌,01_00是2 ** 6 == 64

[24] pry(main)> 01_00 
=> 64 

嗯......没有什么特别之处数语法下划线,它只是为了使它看起来不错:

[23] pry(main)> 0100 
=> 64 

那么这些数字称为什么(这不是直接的二进制...我试图想想他们应该是什么,但不断提出一个空白)。另外为什么他们如此重要?任何人都可以发布描述它们的文档链接吗?

回答

9

如果数字的前缀为0,则它是八进制表示形式。

同样,如果数字前缀为0x0X,则它是十六进制表示。

0x10 
# => 16 
0x100 
# => 256 

顺便说一句,您可以使用% operatorsprintf数字转换成八进制,十六进制,二进制表示:

'%o' % 512 
=> "1000" 

'%x' % 256 
# => "100" 

'%x' % 512 
# => "200" 

'%b' % 3 
# => "11" 
+0

这只是八???啊,当然,我现在感到很蠢,我知道'0x'和'0b'前缀,不知道'0'我猜这是因为我在数千人的思维中,由于下划线,我只是错误地将它推断为二进制-thousands。谢谢 –

+1

我删除了我的答案,因为我错过了Mike实际上并未寻找二进制表示。但我认为值得在这个答案中加入'0b'文字和'%b'格式,因为可能来自寻找基于问题标题 –

+0

@NeilSlater的人的点击,感谢您的评论。我按照你的建议添加了'%b'格式。 – falsetru

相关问题