次のようにして、負の数を正の数に変換できます。
int myInt = System.Math.Abs(-5);
正の数を負にする同等の方法はありますか?
次のようにして、負の数を正の数に変換できます。
int myInt = System.Math.Abs(-5);
正の数を負にする同等の方法はありますか?
回答:
いかがですか
myInt = myInt * -1
myInt = - Myintですか?
myInt *= - 1ですか?
myShort = (short) -myShortと、ネゲートするとショートになるのでintになるのでキャストが必要です。
int myNegInt = System.Math.Abs(myNumber) * (-1);
int negInt = -System.Math.Abs(myInt)
myInt<0 ? myInt : -myInt;はるかに優れています。-演算子が適切な-1 * Numberとオーバーロード機能の省略形として提供されているからといって、*(-1)がトリックになるわけではありません。
と答えたすべての人に注意してください
- Math.Abs(myInteger)
または
0 - Math.Abs(myInteger)
または
Math.Abs(myInteger) * -1
負の数を負に保ち、正の数を負にする方法として。
このアプローチには1つの欠点があります。すべての整数に対して機能するわけではありません。範囲Int32タイプ「は-2からなる31」2「31 - 1」これは、「負の」数がもう1つあることを意味します。その結果、がMath.Abs(int.MinValue)スローされますOverflowException。
正しい方法は、条件ステートメントを使用することです。
int neg = n < 0 ? n : -n;
このアプローチは、「すべての」整数に対して機能します。
Absによっては、int.MinValue(int戻り値の型を想定して)うまくいかない可能性のある問題(など)を解決していることがあります。その場合、例外をスローしてもまったく問題ありません。ただし、この特定の問題には「有効な」結果int.MinValueがありますが、Absルートをたどると例外がスローされます。
n、-32768それ-nもまた-32768!!! さらにint neg = n < 0 ? n : -n;、3成分の1つがまったく何もしないため、すべてのケースで機能する可能性はありません。
もっと楽しくするために:
int myInt = Math.Min(hisInt, -hisInt);
int myInt = -(int)Math.Sqrt(Math.Pow(Math.Sin(1), 2) + Math.Pow(Math.Cos(-1), 2))
* Math.Abs(hisInt);
編集:これは正の入力では間違っています... -x(2s-補数値)の残りのビットは+ xの値の「反対」であり、同じではないことを忘れてしまいました。SO符号ビットを変更するだけでは、正の数では機能しません。
目的のためにここに置いておきます...
またはトリッキーな方法(私は思う)...
int y = x | 〜int.MaxValue;
cause int.MaxValue is 0111 1111 1111 1111 1111 1111 1111 1111
そう
~int.MaxValue is 1000 0000 0000 0000 0000 0000 0000 0000
したがって、int32 Or'edを使用すると、符号ビットが1になり(負になる)、他のすべてのビットは同じままになります...
編集:実際には、1000 0000 0000 0000 0000 0000 0000 0000は実際には最小値なので、これも機能するはずです:
int y = x | int.MinValue; // or, to do it to itself,
x |= int.MinValue;
-number。1すべてゼロと1です。それをか-INGのint.MinValueと同じではありません10000000000000000000000000000001なります-1(すべてのものを。)
ここのパーティーにはかなり遅れましたが、ハードウェア時代の便利なトリックをいくつか紹介します。これらはすべて、2の符号付き数の補数表現を前提としています。
int negate = ~i+1;
int positiveMagnitude = (i ^ (i>>31)) - (i>>31);
int negativeMagnitude = (i>>31) - (i ^ (i>>31));
i == int.MinValue、すべての変数は-2147483648
ちょうど楽しみのために:
int negativeInt = int.Parse(String.Format("{0}{1}",
"-", positiveInt.ToString()));
更新:このアプローチの優れた点は、例外ジェネレーターに簡単にリファクタリングできることです。
int negativeInt = int.Parse(String.Format("{0}{1}",
"thisisthedumbestquestioninstackoverflowhistory", positiveInt.ToString()));
私が使う myInt = -myInt;
とてもシンプルで簡単
ポジティブにしたいなら
myInt = myInt>0 ? myInt : -myInt;
int.MaxValueで2147483647、でもvar i = int.MaxValue; i++;文句を言わない仕事
long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1);
特定の負の数である必要があるとは誰も言っていません。
前述のように、-1を乗算するだけではクールではありません。 int.MinValue * -1 == int.MinValue
それは本当にあなたのアプリケーションに依存しますが、私の場合(ジョイスティックの軸の反転)すべての極値が到達可能であることを確認し、できるだけ多くの忠実度を維持したいと思います。
この目的のために、私はMax <-> Minをマップし、その間のすべてがを取得し* -1
ます。この手法を使用すると、反転時に-32767に到達できません。
private static int Invert(int value)
{
if (value == int.MaxValue) return int.MinValue;
if (value == int.MinValue) return int.MaxValue;
return value * -1;
}
5はありません-5が1/5。