这有什么用 << 我理解在数组中它是用于推送的,但在这里我不清楚在下面的代码中它的用途是什么。正在使用整数的位置。
<<
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 那么它是以字节转换的吗?或者它的确切目的是什么。
8 << 8
2048
bttbmeg01#
如文档所述,integer:<-返回左移“x”位置的整数,如果“x”为负数,则返回右移的整数。在您的场景中,将8个位置向左移动。以下是它的工作原理:
8.to(2) => "1000"
现在让我们换班 "1000" 左边8个位置
"1000"
(8 << 8).to_s(2) => "100000000000"
如果你数一数 0 上面你会看到它被添加了 8 之后 "1000" .现在,让我们看看它是如何返回的 2048 ```"100000000000".to_i(2) => 2048
0
8
evrscar22#
它是一个按位左移位运算符。定义:
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
7 << 2 = 28
0000 0111
现在将每个位向左移动2个位置
128 64 32 16 8 4 2 1----------------------28: 0 0 0 1 1 1 0 0
为什么? 位运算符广泛用于嵌入式系统的低级编程,以应用掩码(在本例中为整数) 利益 看看这个答案:link 查看源以了解更多详细信息:链接
2条答案
按热度按时间bttbmeg01#
如文档所述,integer:<-返回左移“x”位置的整数,如果“x”为负数,则返回右移的整数。在您的场景中,将8个位置向左移动。
以下是它的工作原理:
现在让我们换班
"1000"
左边8个位置如果你数一数
0
上面你会看到它被添加了8
之后"1000"
.现在,让我们看看它是如何返回的
2048
```"100000000000".to_i(2) => 2048
evrscar22#
它是一个按位左移位运算符。
定义:
例子:
如果你这样做
7 << 2 = 28
7在基数2中:0000 0111
```128 64 32 16 8 4 2 1
----------------------
7: 0 0 0 0 0 1 1 1
128 64 32 16 8 4 2 1
----------------------
28: 0 0 0 1 1 1 0 0