gpt4 book ai didi

c++ - 模运算符 (%) 给出不同的结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:54 25 4
gpt4 key购买 nike

给出这个例子:

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

基本上在两个语句中 im processing -1 % 3 但编译器输出不同的数字。我不明白这个结果,也许有人可以向我解释一下。

编辑作为@Chris、@Keith Thompson @AnT 建议的片段

std::cout << std::numeric_limits<std::size_t>::max() % 3 <<"\n";     //output: 0
std::cout << i % numbers.size() << "\n"; // output: 0

打印预期的输出。感谢大家的宝贵建议!

最佳答案

i % 3 是您所期望的,自 C++11 以来,它定义了语义而不是实现定义的(如果我没记错的话)结果。

numbers.size() 具有无符号类型 (std::size_t)。假设 size_tint 一样大或更大,i 在执行操作之前被转换为相同的无符号类型。 i 获取的值将是该类型的最大值,对您来说它看起来可以被 3 整除。

关于c++ - 模运算符 (%) 给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29269571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com