我是初学者/中级Ruby学习者,我跑了一些我不理解的东西。我环顾了一下 stackoverflow ,但找不到一个清晰,简洁的答案,这就是为什么我要创建一个新问题。
如果给出数字a和b,当r等于:
时,结果是什么ra << b
特别是,我正在寻找一个表示三个变量之间关系的通用方程。此外,深入了解Ruby如何在引擎盖下工作受到欢迎,但是次要的。
仅供参考,如果有帮助,我在“https://repl.it/languages/ruby”使用repl.it。
提前致谢!
编辑:&lt;&lt;通常称为二进制或按位左移运算符。 根据Andrey Deineko的EDIT2:这个问题与顶部列出的其他帖子不同,因为在另一篇文章中,没有明确,简明的答案如何运作。它简单地说它是一个按位左移位运算符,并显示了一些使用该方法的输出示例。特别是,我一直在寻找它如何在整数或fixnums上工作。似乎另一篇文章是关于运营商的一般用途。重申一下,这个问题是不同的,因为它特别适用于它如何在整数上工作,因此,下面的答案更详细地说明它如何在二进制级别上工作。
答案 0 :(得分:5)
该操作被称为“按位左移”,并且很容易被该术语转换。
简而言之,它采用LHO的二进制表示,并将其向左移动count,指定为RHO。
考虑一下5 << 2
。 5
由(64位)表示:
0000 0000 0000 0101
2
左移是:
00 0000 0000 0101 00 # = 0000 0000 0001 0100
或反过来,20
。我们来看看:
5 << 2
#⇒ 20
由于二进制数字基本系统的性质,左移相当于乘以2
的相应幂。那就是说,
m << n ≡ m × 2ⁿ
5 << 4 #⇒ 5 × 2⁴ ≡ 80
#⇒ 80
答案 1 :(得分:1)
根据您的Ruby版本,整数可以从Fixnum继承instrumentalisations
,或Integer
无论哪种方式,操作都是相同的:分配给<<
和a
的整数将b
解释为按位左移运算符。你可以在这里看到幕后发生的事情:https://ruby-doc.org/core-2.4.0/Integer.html#method-i-3C-3C
这里有一个关于此运算符的有趣讨论:Clarification on the Ruby << Operator