Python 代码不像在 C++ 中那样工作



如何在Python中获得与c++相同的值?

<CPP代码/strong>

#include <bitset>
#include <iostream>
using namespace std;
int main() {
short int divider = -32768;
auto divider_bin_str = bitset<16>(divider).to_string();
cout << "divider: " << divider << " " << divider_bin_str << endl; // divider: -32768 1000000000000000
char division = static_cast<char>(divider % 3000);
string division_bin_str = bitset<8>(division).to_string();
cout << "division: " << (int) division << " " << division_bin_str << endl; // division: 48 00110000
}

Python代码

divider = -32768
print(f'divider: {divider} {bin(divider)}')  # divider: -32768 -0b1000000000000000
division = divider % 3000
print(f'division: {division} {bin(division)}')  # division: 232 0b11101000

我想不出有什么比从Python调用C代码更好的了:)

如引用为什么c++输出负数时使用模?

ISO/IEC 14882:2003(E) - 5.6乘法运算符:

二进制/操作符产生商,二进制%操作符产生第一个表达式除以第二个表达式后的余数。如果/或%的第二个操作数为零,则行为未定义;否则(a/b)*b + a%b等于a。如果两个操作数都是非负的,则余数是非负的;如果不是,则余数的符号为实现定义的

这里c++编译器计算

-32768 % 3000  = -2768

然后包装char类型(signed/unsigned?)还是实现定义的)

-2768 wrapped around 256 = 48 (< 127 so no issue here)

对应的python代码(按照设计,python在这种情况下不会返回负结果)是:

divider = -32768
division = (divider % 3000)
if divider < 0:
division -= 3000
result = division % 256
if result > 127:  # if signed char (no difference in that case)
result = 256-result
print(division % 256)

打印48

考虑到实现定义的方面,我建议您针对许多测试用例测试此c++和python代码,例如使用值>如果你改变了编译器的选项或者编译器本身,

相关内容

  • 没有找到相关文章

最新更新