C++ 除法结果(mod)的行为很奇怪
这应该是一个非常基本的东西,但不知怎么的,我看不出问题所在C++ 除法结果(mod)的行为很奇怪,c++,C++,这应该是一个非常基本的东西,但不知怎么的,我看不出问题所在 #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
#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;
}
如果我使用j=ind-i*dim
,一切正常
EDIT1:
有人能删除这个问题吗?这样我就不会因为失明而感到羞耻了 你的意思可能是
j=ind&(dim-1)
,假设dim
是二的幂
它提取低阶位,具有计算模的效果。当然,大多数编译器都会在一英里之外看到这种优化,因此您真的应该使用%
操作符来进行真正的模运算:
j = ind % mod;
您希望得到什么输出?为什么要按位AND(
&
)?问题的名字提到了模数,这是%
@olevegard-shit,没错!过热……)或者,从注释中可以明显看出,%
表示模!;)但这也是我所想的。。。。
j = ind % mod;