如何用mysql bitshift负数以获得Java,Python等的结果



当我想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不属于无符号整数范围。

相关内容

  • 没有找到相关文章

最新更新