ruby中的<<代表什么整数
What is << stand for in ruby with integer
<<
有什么用我在数组中理解它用于推送但是在这里我不清楚以下代码中的目的是什么。在哪里使用整数。
def array_pack(a)
a.reverse.reduce(0) { |x, b| (x << 8) + b }
end
array_pack([24, 85, 0]) # will print 21784
如果我 x 是 8 并且我写 8 << 8
它给我的响应是 2048
那么它是以字节为单位转换的吗?或者它的具体用途是什么。
这是一个按位左移运算符。
定义:
The LEFT SHIFT operator << shifts each bit of a number to the left by n positions.
示例:
如果你这样做 7 << 2 = 28
7 基数 2:0000 0111
128 64 32 16 8 4 2 1
----------------------
7: 0 0 0 0 0 1 1 1
现在每个位向左移动 2 个位置
128 64 32 16 8 4 2 1
----------------------
28: 0 0 0 1 1 1 0 0
为什么?
按位运算符广泛用于嵌入式系统的低级编程以应用掩码(在本例中为整数)
好处
看到这个 SO 答案:link
查看源代码了解更多详情:link
如文档所述,Integer:<< - Returns 整数向左移动“X”位置,如果“X”为负,则向右移动。在你的场景中是向左移动 8 个位置。
工作原理如下:
8.to(2) => "1000"
现在让我们向左移动 "1000"
8 个位置
(8 << 8).to_s(2) => "100000000000"
如果算上上面的 0
,您会看到在 "1000"
之后添加了 8
。
现在,让我们看看如何 returns 2048
"100000000000".to_i(2) => 2048
<<
有什么用我在数组中理解它用于推送但是在这里我不清楚以下代码中的目的是什么。在哪里使用整数。
def array_pack(a)
a.reverse.reduce(0) { |x, b| (x << 8) + b }
end
array_pack([24, 85, 0]) # will print 21784
如果我 x 是 8 并且我写 8 << 8
它给我的响应是 2048
那么它是以字节为单位转换的吗?或者它的具体用途是什么。
这是一个按位左移运算符。
定义:
The LEFT SHIFT operator << shifts each bit of a number to the left by n positions.
示例:
如果你这样做 7 << 2 = 28
7 基数 2:0000 0111
128 64 32 16 8 4 2 1
----------------------
7: 0 0 0 0 0 1 1 1
现在每个位向左移动 2 个位置
128 64 32 16 8 4 2 1
----------------------
28: 0 0 0 1 1 1 0 0
为什么?
按位运算符广泛用于嵌入式系统的低级编程以应用掩码(在本例中为整数)
好处
看到这个 SO 答案:link
查看源代码了解更多详情:link
如文档所述,Integer:<< - Returns 整数向左移动“X”位置,如果“X”为负,则向右移动。在你的场景中是向左移动 8 个位置。
工作原理如下:
8.to(2) => "1000"
现在让我们向左移动 "1000"
8 个位置
(8 << 8).to_s(2) => "100000000000"
如果算上上面的 0
,您会看到在 "1000"
之后添加了 8
。
现在,让我们看看如何 returns 2048
"100000000000".to_i(2) => 2048