Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 除法结果(mod)的行为很奇怪_C++ - Fatal编程技术网

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;