在 Ruby 中,铲子运算符 (<<) 如何作用于两个整数?
In Ruby, how does the shovel operator (<<) work on two integers?
我是 beginner/intermediate Ruby 学习者,我 运行 有一些我不明白的东西。我环顾了 Whosebug,但找不到清晰、简洁的答案,所以这就是我提出新问题的原因。
如果给定一个数字a和b,结果r是什么,当r等于:
a << b
特别是,我正在寻找表示三个变量之间关系的通用方程。此外,欢迎深入了解 Ruby 的幕后工作原理,但次要。
仅供参考,如果有帮助,我在“https://repl.it/languages/ruby”处使用 repl.it。
提前致谢!
编辑:<< 通常称为二进制或按位左移运算符。
根据 Andrey Deineko 的 EDIT2:这个问题与顶部列出的另一个 post 不同,因为在另一个 post 中,没有明确、简洁的答案来说明它是如何工作的。它只是简单地说明它是一个按位左移运算符,并展示了使用该方法的几个输出示例。特别是,我一直在寻找它如何仅对整数或固定数字起作用。另一个 post 似乎是关于运算符的一般用途。重申一下,这个问题是不同的,因为它特别适用于它如何处理整数,因此,下面的答案更详细地说明了它如何在二进制级别上工作。
根据您的 Ruby 版本,整数可能从 Fixnum, or Integer
继承 <<
无论哪种方式,操作都是相同的:分配给 a
和 b
的整数将 <<
解释为按位左移运算符。你可以在这里看到幕后发生的事情:https://ruby-doc.org/core-2.4.0/Integer.html#method-i-3C-3C
这里有一个关于此运算符的有趣讨论:Clarification on the Ruby << Operator
该操作称为“按位左移”,很容易通过该术语进行谷歌搜索。
简而言之,它采用 LHO 的二进制表示并将其左移计数,指定为 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
我是 beginner/intermediate Ruby 学习者,我 运行 有一些我不明白的东西。我环顾了 Whosebug,但找不到清晰、简洁的答案,所以这就是我提出新问题的原因。
如果给定一个数字a和b,结果r是什么,当r等于:
a << b
特别是,我正在寻找表示三个变量之间关系的通用方程。此外,欢迎深入了解 Ruby 的幕后工作原理,但次要。
仅供参考,如果有帮助,我在“https://repl.it/languages/ruby”处使用 repl.it。
提前致谢!
编辑:<< 通常称为二进制或按位左移运算符。 根据 Andrey Deineko 的 EDIT2:这个问题与顶部列出的另一个 post 不同,因为在另一个 post 中,没有明确、简洁的答案来说明它是如何工作的。它只是简单地说明它是一个按位左移运算符,并展示了使用该方法的几个输出示例。特别是,我一直在寻找它如何仅对整数或固定数字起作用。另一个 post 似乎是关于运算符的一般用途。重申一下,这个问题是不同的,因为它特别适用于它如何处理整数,因此,下面的答案更详细地说明了它如何在二进制级别上工作。
根据您的 Ruby 版本,整数可能从 Fixnum, or Integer
继承<<
无论哪种方式,操作都是相同的:分配给 a
和 b
的整数将 <<
解释为按位左移运算符。你可以在这里看到幕后发生的事情:https://ruby-doc.org/core-2.4.0/Integer.html#method-i-3C-3C
这里有一个关于此运算符的有趣讨论:Clarification on the Ruby << Operator
该操作称为“按位左移”,很容易通过该术语进行谷歌搜索。
简而言之,它采用 LHO 的二进制表示并将其左移计数,指定为 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