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