如何在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代码,例如使用值>如果你改变了编译器的选项或者编译器本身,