gpt4 book ai didi

c++ - 除法(mod)的结果表现得很奇怪

转载 作者:行者123 更新时间:2023-11-28 03:15:02 28 4
gpt4 key购买 nike

这应该是一个非常基本的东西,但不知何故我没有看到问题。

#include <iostream>

template <int dim>
inline
void
i2c(const int & ind, int & i, int &j) {
i = (int) ind / dim;
j = ind & dim;
//j = ind - i*dim;
}

static const int dim = 2;

int main() {
int i,j;

for (unsigned int c = 0; c < dim*dim; c++) {
i2c<dim>(c,i,j);
std::cout<<c<<"/"<<dim<<"="<<i<<"; "<<c<<"&"<<dim<<"="<<j<<std::endl;
}
return 0;
}

这是 code .

输出是:

0/2=0; 0&2=0
1/2=0; 1&2=0
2/2=1; 2&2=2
3/2=1; 3&2=2

如果我使用 j = ind - i*dim - 一切正常。

编辑 1:有人可以删除这个问题,这样我就不会因为失明而感到羞耻吗? ;)

最佳答案

您的意思可能是 j = ind & (dim - 1);,假设 dim 是 2 的幂。

提取低阶位,具有计算模数的作用。当然,大多数编译器会在一英里之外看到这种优化,所以你真的应该只使用 % 运算符来真正地做模:

j = ind % mod;

关于c++ - 除法(mod)的结果表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17172365/

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