web-dev-qa-db-ja.com

モジュラス演算子はどのように機能しますか?

行ごとに固定数の要素を表示するには、配列の出力をフォーマットする必要があるとしましょう。モジュラス演算を使用してこれを行うにはどうすればよいですか?

C++を使用すると、以下のコードは1行に6つの要素を表示するために機能しますが、どのように、そしてなぜ機能するのかわかりません。

for ( count = 0 ; count < size ; count++)
{
    cout << somearray[count];
    if( count % 6 == 5) cout << endl;
}

1行に5つの要素を表示するにはどうすればよいですか?必要な正確な表現を見つけるにはどうすればよいですか?

29
Tex Qas

c ++の式a % bは、aのbによる除算の剰余を返します(正の場合。負の数の場合、結果の符号は実装定義です)。例えば:

5 % 2 = 1
13 % 5 = 3

この知識があれば、コードを理解しようとすることができます。条件count % 6 == 5は、6による除算カウントの残りが5のときに改行が書き込まれることを意味します。どのくらいの頻度で発生しますか? 6行目(カウント= 5)から始まる、正確に6行離れています(練習:番号1..30を書き、この条件を満たすものに下線を引きます)。

コードから目的の動作を得るには、条件をcount % 5 == 4に変更する必要があります。これは、5行目(カウント= 4)から5行ごとに改行します。

37
KCH

基本的にモジュラス演算子は、11を3で割ったときの余り/残りを数学の簡単な例で示しますか?答えは2です

同じことのために、C++にはモジュラス演算子( '%')があります

説明用の基本コード

#include <iostream>
using namespace std;


int main()
{
    int num = 11;
    cout << "remainder is " << (num % 3) << endl;

    return 0;
}

表示するもの

残りは2

6
Atri Dave

このJSFiddleプロジェクトは、モジュラスの仕組みを理解するのに役立ちます。 http://jsfiddle.net/elazar170/7hhnagrj

 function modulus(x,y){
   var m = Math.floor(x / y);
   var r = m * y;
   return x - r;
 }
2
SkySibe

分割の残りを提供します。

int c=11, d=5;
cout << (c/d) * d + c % d; // gives you the value of c
2
Gung Foo

モジュラス演算子は剰余を与えると考えることができます。 count%6は、可能な限り6をcountから除算し、0〜5の剰余を与えます(すでに6をできるだけ多く除算しているため、これらはすべての可能な剰余です)。配列の要素はすべてforループで出力されますが、残りが5(6番目の要素ごと)になるたびに、改行文字が出力されます。これにより、1行に6つの要素が与えられます。行ごとに5つの要素を使用するには、

if(カウント%5 == 4)

2
Andy Harris