You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MariaDB(InnoDB引擎)中使用按位或运算符(|)?

关于MariaDB负数按位或运算结果异常的解答

问题本质

MariaDB(包括MySQL)的按位运算并非使用1's补码,而是基于2's补码存储整数,但执行按位操作时会将所有操作数转换为无符号64位整数处理,运算结果也会以无符号形式返回。

你遇到的SELECT -1107296257 | -8388608得到18446744073709551615,是因为:

  • 这两个负数在64位2's补码中都是高位全1的二进制数,按位或后结果是所有位全1;
  • 全1的64位无符号整数对应的十进制值就是18446744073709551615(等价于有符号的-1)。

解决方法

如果需要得到有符号整数的运算结果,只需将按位运算的结果显式转换为有符号类型即可,使用CAST()函数:

SELECT CAST(-1107296257 | -8388608 AS SIGNED);

执行上述语句会返回-1,这是符合2's补码逻辑的正确有符号结果。

补充说明

MariaDB没有全局设置让按位运算默认返回有符号结果的选项,所有按位操作默认都是以无符号64位整数为基准处理,只能通过显式类型转换来获取有符号结果。

内容的提问来源于stack exchange,提问作者mimic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:32:05