在 Python 中重写 C++ 位移运算符

Rewrite C++ bitshift operator in Python

我在 C++ 中有这段代码:

#include <iostream>

using namespace std;

int main()
{
    unsigned char v1;
    v1 = 23 << 6;
    cout << "v1: " << (int)v1;

    return 0;
}

当我执行它时,它给我的结果是 192。 但是,当我在 Python 中执行相同操作时 (23 << 6),我得到 1472 而不是 192。 我在这里做错了什么?你知道有什么方法可以将这个移位操作 1:1 重写为 Python 吗?

23 << 6 在 C++ 中作为 int 执行,但将其分配回 unsigned char 会将其截断为其位大小(在 Python 的任何平台上为 8运行)。因此,要在 Python 中获得相同的值,您必须执行 (23 << 6) & 0xFF.

另一方面,要在 C++ 中获得“正确的”(未截断的)结果,只需将其分配给 unsigned int 而不是 unsigned char(这在 int 对于结果来说足够大,否则你必须首先将一个操作数转换为更大的东西;Python 没有这样的问题,因为它使用任意大小的整数)。