KDB中支持的位移位操作

KDB中支持的位移位操作,kdb,Kdb,我可以在kdb中执行位移位操作吗? 例如,我有一个值256 q)0b vs 256 0000000000000000000000000000000000000000000000000000000100000000b 我只想使用位移位操作乘以2: 0000000000000000000000000000000000000000000000000000001000000000b kdb支持这个吗? 此外,是否也支持 谢谢 您可以使用prev和next来移位位。例如,要乘以2,请使用n

我可以在kdb中执行位移位操作吗? 例如,我有一个值256

  q)0b vs 256
  0000000000000000000000000000000000000000000000000000000100000000b
我只想使用位移位操作乘以2:

  0000000000000000000000000000000000000000000000000000001000000000b
kdb支持这个吗? 此外,是否也支持


谢谢

您可以使用
prev
next
来移位位。例如,要乘以2,请使用
next
,然后将其转换回具有
0b sv
的数字:

0b sv next 0b vs 256
512
要移位超过1位,您可以使用带over的
next
prev
,或使用
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)可以使用not EQUALES
完成。在本例中,有3个列表:

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

您可以使用
prev
next
来移位位。例如,要乘以2,请使用
next
,然后将其转换回具有
0b sv
的数字:

0b sv next 0b vs 256
512
要移位超过1位,您可以使用带over的
next
prev
,或使用
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)可以使用not EQUALES
完成。在本例中,有3个列表:

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

您可以使用
旋转

负数将使位向右移动,即除以2:

q)0b sv   -1 rotate 0b vs 256
128j
将位旋转10次

q)0b sv   10 rotate 0b vs 1
1024j
编辑:如果MSB为
1
并向左旋转,则
旋转
将给出有趣的结果,反之亦然。例如:

q)1 rotate 1000b
0001b

您可以使用
rotate

负数将使位向右移动,即除以2:

q)0b sv   -1 rotate 0b vs 256
128j
将位旋转10次

q)0b sv   10 rotate 0b vs 1
1024j
编辑:如果MSB为
1
并向左旋转,则
旋转
将给出有趣的结果,反之亦然。例如:

q)1 rotate 1000b
0001b

为什么这个问题被否决?为什么这个问题被否决?如果我想说10次?我应该为此使用循环吗?您可以使用语法
next/[10;]
-10xprev
。我已经修改了我的答案,加入了一个例子。如果我想说10次?我应该为此使用循环吗?您可以使用语法
next/[10;]
-10xprev
。我已经修改了我的答案,加入了一个例子。旋转不一定给出与位移位相同的输出,例如
1rotate 1000b
next 1000b
有不同的输出。旋转不一定给出与位移位相同的输出,例如
1rotate 1000b
next 1000b
具有不同的输出。