Với Ví dụ này:Modulo điều hành (%) cho kết quả khác nhau
std::vector<int> numbers = {5,6,7}; //size is 3
int i = -1;
std::cout << i % 3 <<"\n"; // output: -1
std::cout << i % numbers.size() << "\n"; // output: 0
cơ bản trong cả hai câu lệnh im chế biến -1% 3 nhưng kết quả đầu ra trình biên dịch số khác nhau. Tôi không hiểu kết quả này, có lẽ ai đó có thể giải thích cho tôi.
chỉnh sửa: như @ Chris, @ Keith Thompson @AnT đề nghị đoạn
std::cout << std::numeric_limits<std::size_t>::max() % 3 <<"\n"; //output: 0
std::cout << i % numbers.size() << "\n"; // output: 0
in sản lượng dự kiến. Cảm ơn lời khuyên hữu ích dành cho tất cả mọi người!
Xem tại đây: http://stackoverflow.com/questions/7594508/modulo-operator-with-negative-values –
@ RollenD'Souza: Điều đó thực sự không liên quan. – Deduplicator
Vấn đề là "numbers.size()" xảy ra là "unsigned int"; và "-1" được chuyển thành "0xffffffff" (hoặc bất kỳ giá trị nào cho kiến trúc của bạn) sau lưng bạn: ( – FoggyDay