MySQL 源代码文档中的 (1UL << 22) 是什么意思

What does (1UL << 22) mean in MySQL Source Code Documentation

我正在更新 Java 中的现有库 我必须连接到 MySQL 8 但源代码文档中有一个我不明白的 #DEFINE。我正在专门查看 https://dev.mysql.com/doc/dev/mysql-server/latest/group__group__cs__capabilities__flags.html 处的客户端功能标志。

一些功能标志显示十进制值,因此我可以将它们转换为 unix 以便于位掩码,但有一些标志,如 CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS,其值为 (1UL << 22)。 我不知道 (1UL << 22) 意味着能够将其转换为我可以在 java 中使用的东西。

一般来说,(1UL << 22)表示1在Unsigned Long中左移22次。

也就是2^22,也就是4*1024*1024。

在您的情况下,如果寄存器的第 22 位为 1(位计数从 0 开始),CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS 只是在其特定的无符号长寄存器中启用的标志。