在 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 没有这样的问题,因为它使用任意大小的整数)。
我在 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 没有这样的问题,因为它使用任意大小的整数)。