2017-07-11 4 views
2

TL; DR:どのようにしてCでモジュラスを得ることができますか?

int remainder = -1 % 5; //-1 
int modulus = -1 modulus 5; //4 How do I do this? 

私は、配列の変調された値を読み取るしようとしています。したがって、配列の長さで変調されたインデックスは、更新されたインデックスになります。例:

array = {100, 200, 300, 400, 500} 
array[6] = array[6 mod 5] = array[1] = 200 

十分に簡単です。しかし、私の指数がマイナスの場合、それが問題になるのです。

array[-1] = array[???] = array[4] = 500 

私は-1 mod 5を実行する方法がわかりません。残りの演算子はポジティブではありますが、ネガティブではありません。ここで

は、正の値だけのために働く私のサンプルコードです:

static void Main(string[] args) 
{ 
    int[] myArray = new int[5] { 100, 200, 300, 400, 500 }; 
    int myIndex = myArray.Length - 1; 
    for (int i = 0; i < 15; i++) 
    { 
     myIndex = --myIndex % myArray.Length; 
     Console.WriteLine("Value: " + myArray[myIndex]); 
    } 
    Console.WriteLine("Done"); 
} 

は、どのように私は数ではなく、C#で、残りの係数を得ることができますか?私はあなたが達成したいと思います

+0

実際には、剰余演算子*は、ネガティブに作用します。-1を5で除算した余りは-1であり、単に-1/5が0であるため、 '-1'は' 0 * 5'と '-1'の違いです。問題は、この演算子が提供するもの以外の何かをしたいということです。 –

+1

最も単純な方法は、2つの剰余計算を行うことです: 'a%b' - >'((a%b)+ b)%b'。 –

+1

[リンクされた回答](https://stackoverflow.com/a/1082938/580951)を参照してください。 – Romoku

答えて

1

はこれです:

var newIndex = myIndex % myArray.Length; 
if (newIndex < 0) 
{ 
    newIndex += myArray.Length; 
} 

はそれが何をしたいのですか?

私はあなたの 'モジュラス'の使用法も混乱します。私が知る限り、モジュラスは絶対値です。

var modulus = Math.Abs(value) 
+0

Errr、はい。それが私の使っているものです。私はより洗練されたソリューションを望んでいました。 C#にある種のモジュラス演算子があると思われましたが、間違っている可能性があります。 – Evorlor

+0

@edit:法は絶対値ではありません。 https://stackoverflow.com/a/13683709/1889720 – Evorlor

関連する問題