此问题已在此处有答案:
How does the modulo (%) operator work on negative numbers in Python?(12个回答)
7天前关闭
如何获得相同的值 在Python中,C++?
CPP代码
#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代码更好的方法了:)
1条答案
按热度按时间lx0bsm1f1#
如Why does C++ output negative numbers when using modulo?中所引用
ISO/IEC 14882:2003(E)- 5.6乘法运算符:
二元/运算符产生商,二元%运算符产生第一个表达式除以第二个表达式的余数。如果/或%的第二个操作数为零,则行为未定义;否则(a/B)*b + a%b等于a。如果两个操作数都是非负的,则余数是非负的;如果不是,则余数的符号是实现定义的
这里C++编译器计算
然后 Package char类型(有符号/无符号?再次定义实现)
相应的python代码(python在这种情况下不会返回负结果,这是设计的)是:
印刷品
48
考虑到实现定义的方面,我建议你用大量的测试用例来测试这个C++和python代码,例如,当转换为char时,如果你改变了编译器选项或编译器本身,值〉127。