【问题标题】:In Ruby, how does the shovel operator (<<) work on two integers? [duplicate]在 Ruby 中,铲子运算符 (<<) 如何处理两个整数? [复制]
【发布时间】:2017-03-15 04:22:14
【问题描述】:

我是一名初学者/中级 Ruby 学习者,我运行了一些我不理解的东西。我环顾了 stackoverflow,但找不到一个清晰、简洁的答案,所以我要创建一个新问题。

如果给定一个数a和b,当r等于时,r是什么结果:

a << b 

特别是,我正在寻找一个表示三个变量之间关系的通用方程。此外,欢迎深入了解 Ruby 的底层工作原理,但这是次要的。

仅供参考,如果有帮助,我会在“https://repl.it/languages/ruby”使用 repl.it。

提前致谢!

编辑:

【问题讨论】:

  • Ruby 和 C++ 一样,使用&lt;&lt; 运算符来处理很多事情,而不是最初的用途。也许这就是像 Bash shell 这样的东西的影响,&gt; 和 &lt; 具有特定的含义。

标签: ruby integer operator-keyword


【解决方案1】:

该操作称为“按位左移”,可以通过该术语轻松搜索。

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

假设你有5 &lt;&lt; 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

【讨论】:

  • 换句话说:5 &lt;&lt; 2 与5 * 2 ** 2 相同,或者一般形式x &lt;&lt; y 是x * 2 ** y。
  • @tadman 我相信它和我在最后一个 sn-p 中输入的完全一样:m
  • 完全一样。我只是认为 Ruby 表示法也可能具有教育意义。
  • 甜蜜!这是有道理的。感谢您的回复。现在唯一的事情是这导致我需要更多地了解 64 位以及它如何影响按位左移运算符。
  • 64 位(这里指的是硬件平台架构)无论如何都不会影响按位移位,它会影响二进制表示中 0 和 1 的数量。
【解决方案2】:

根据您的 Ruby 版本,整数可能从 Fixnum 或 Integer 继承 &lt;&lt;

无论哪种方式,操作都是相同的:分配给a 和b 的整数将&lt;&lt; 解释为按位左移运算符。你可以在这里看到幕后发生的事情:https://ruby-doc.org/core-2.4.0/Integer.html#method-i-3C-3C

这里有一个关于这个运算符的有趣讨论:Clarification on the Ruby << Operator

【讨论】:

  • 酷,感谢提供额外资源
猜你喜欢
  • 2012-03-09
  • 2012-04-07
  • 2016-10-27
  • 2018-09-14
  • 2016-01-01
  • 2018-03-31
  • 2021-04-16
相关资源
最近更新 更多