当我想bitshift -2>> 4时,它应该给我-1。Python和Java确实给我-1。但是,如果我在MySQL Server上尝试它,我将获得1152921504606846975。我尝试将其倒数倒数等,但我无法获得-1。因此,有人知道如何bitshift以获取-1。
根据文档,MySQL的位移动运算符生成 unsigned 64位整数。因此,如果您想获得带负数的预期行为,则可以添加自己的逻辑:
WITH yourTable AS (
SELECT 4 AS val UNION ALL
SELECT -4
)
SELECT
IF(val > 0, val >> 2, -1.0*((-1.0*val) >> 2)) AS result
FROM yourTable;
此输出:
1
-1.0
>>:
向右移动一个(bigint(的数字。
结果是无符号的64位整数。该值被截断为64位。特别是,如果移位计数更大或等于未签名的64位编号的宽度,则结果为零。
-1
不属于无符号整数范围。