KDB支持移位操作

时间:2018-08-29 02:57:23

标签: kdb

我可以在kdb中执行移位操作吗? 例如,我的值为256

  q)0b vs 256
  0000000000000000000000000000000000000000000000000000000100000000b

我只想通过移位操作乘以2:

  0000000000000000000000000000000000000000000000000000001000000000b

kdb支持吗? 另外,是否也支持OR?

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以使用prevnext来移位该位。例如,要乘以2,请使用next,然后用0b sv转换回数字:

0b sv next 0b vs 256
512

要移位1位以上,可以使用nextprev结束,或使用xprev

q)0b sv next/[10;0b vs 256]
262144
q)0b sv -10 xprev 0b vs 256
262144

在每种情况下,该位都移位10位。请注意,没有xnext,必须将负数与xprev一起使用。

可以通过在相等长度的布尔值列表上使用any|来实现包含或,例如:

0b sv any 0b vs/:256 512
768

可以使用不等于<>的方式进行异或(XOR)。在此示例中,有3个列表:

(<>/)(0011b;0101b;1000b)
1110b

答案 1 :(得分:2)

您可以使用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为rotate,并且向左旋转,则1会给出有趣的结果。示例:

q)1 rotate 1000b
0001b