在Ruby中,铲运算符(<<)如何处理两个整数?

Zen*_*r21 2 ruby integer operator-keyword

我是初学者/中级Ruby学习者,我跑了一些我不理解的东西.我查看了stackoverflow,但找不到一个清晰,简洁的答案,这就是为什么我要创建一个新问题.

如果给出数字a和b,当r等于时,结果是什么r:

a << b 
Run Code Online (Sandbox Code Playgroud)

特别是,我正在寻找一个表示三个变量之间关系的通用方程.此外,深入了解Ruby如何在引擎盖下工作是受欢迎的,但次要的.

仅供参考,我在" https://repl.it/languages/ruby " 使用repl.it.

提前致谢!

编辑:<<通常被称为二进制或按位左移运算符.根据Andrey Deineko的EDIT2:这个问题与顶部列出的其他帖子不同,因为在另一篇文章中,没有明确,简明的答案如何运作.它简单地说它是一个按位左移位运算符,并显示了一些使用该方法的输出示例.特别是,我一直在寻找它如何在整数或fixnums上工作.似乎另一篇文章是关于运营商的一般用途.重申一下,这个问题是不同的,因为它特别适用于它如何在整数上工作,因此,下面的答案更详细地说明它如何在二进制级别上工作.

Ale*_*kin 6

该操作被称为"按位左移",并且该术语很容易被转换.

简而言之,它采用LHO的二进制表示,并将其向左移动count,指定为RHO.

考虑一下你5 << 2.5由(64位)表示:

0000 0000 0000 0101
Run Code Online (Sandbox Code Playgroud)

左移2是:

00 0000 0000 0101 00 # = 0000 0000 0001 0100
Run Code Online (Sandbox Code Playgroud)

或者反过来20.让我们检查:

5 << 2
#? 20
Run Code Online (Sandbox Code Playgroud)

由于二进制数字基本系统的性质,左移相当于乘以各自的幂2.那说,

m << n ? m × 2?

5 << 4 #? 5 × 2? ? 80
#? 80
Run Code Online (Sandbox Code Playgroud)