我可以在kdb中执行移位操作吗? 例如,我的值为256
q)0b vs 256
0000000000000000000000000000000000000000000000000000000100000000b
我只想通过移位操作乘以2:
0000000000000000000000000000000000000000000000000000001000000000b
kdb支持吗? 另外,是否也支持OR?
谢谢!
答案 0 :(得分:4)
您可以使用prev
和next
来移位该位。例如,要乘以2,请使用next
,然后用0b sv
转换回数字:
0b sv next 0b vs 256
512
要移位1位以上,可以使用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)。在此示例中,有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