KDB 支持的移位操作
Bit shift operation supported in KDB
我可以在 kdb 中执行移位操作吗?
例如我有一个值 256
q)0b vs 256
0000000000000000000000000000000000000000000000000000000100000000b
我只想使用位移运算乘以 2:
0000000000000000000000000000000000000000000000000000001000000000b
kdb 支持吗?
此外,是否也支持 OR?
谢谢!
您可以使用prev
和next
来移位。例如,乘以 2 使用 next
然后转换回数字 0b sv
:
0b sv next 0b vs 256
512
要移动超过 1 位,您可以使用 next
或 prev
和 over,或者使用 xprev
:
q)0b sv next/[10;0b vs 256]
262144
q)0b sv -10 xprev 0b vs 256
262144
在每种情况下,该位都被移动了 10 个位置。请注意,没有 xnext
,负值必须与 xprev
一起使用。
包含 OR 可以通过在等长的布尔值列表上使用 any
或 |
来实现,例如:
0b sv any 0b vs/:256 512
768
可以对不等于进行异或 (XOR) <>
。在这个例子中有 3 个列表:
(<>/)(0011b;0101b;1000b)
1110b
你可以使用 rotate
function
q)0b sv 1 rotate 0b vs 256
512j
负数会将位向右移动,即除以 2:
q)0b sv -1 rotate 0b vs 256
128j
将位旋转 10 次
q)0b sv 10 rotate 0b vs 1
1024j
编辑:如果 MSB 为 1
并向左旋转,则 rotate
将给出有趣的结果,反之亦然。示例:
q)1 rotate 1000b
0001b
我可以在 kdb 中执行移位操作吗? 例如我有一个值 256
q)0b vs 256
0000000000000000000000000000000000000000000000000000000100000000b
我只想使用位移运算乘以 2:
0000000000000000000000000000000000000000000000000000001000000000b
kdb 支持吗? 此外,是否也支持 OR?
谢谢!
您可以使用prev
和next
来移位。例如,乘以 2 使用 next
然后转换回数字 0b sv
:
0b sv next 0b vs 256
512
要移动超过 1 位,您可以使用 next
或 prev
和 over,或者使用 xprev
:
q)0b sv next/[10;0b vs 256]
262144
q)0b sv -10 xprev 0b vs 256
262144
在每种情况下,该位都被移动了 10 个位置。请注意,没有 xnext
,负值必须与 xprev
一起使用。
包含 OR 可以通过在等长的布尔值列表上使用 any
或 |
来实现,例如:
0b sv any 0b vs/:256 512
768
可以对不等于进行异或 (XOR) <>
。在这个例子中有 3 个列表:
(<>/)(0011b;0101b;1000b)
1110b
你可以使用 rotate
function
q)0b sv 1 rotate 0b vs 256
512j
负数会将位向右移动,即除以 2:
q)0b sv -1 rotate 0b vs 256
128j
将位旋转 10 次
q)0b sv 10 rotate 0b vs 1
1024j
编辑:如果 MSB 为 1
并向左旋转,则 rotate
将给出有趣的结果,反之亦然。示例:
q)1 rotate 1000b
0001b