Negatif bir sayıyı aşağıdaki gibi pozitif hale dönüştürebilirsiniz:
int myInt = System.Math.Abs(-5);
Pozitif bir sayıyı negatif yapmak için eşdeğer bir yöntem var mı?
Negatif bir sayıyı aşağıdaki gibi pozitif hale dönüştürebilirsiniz:
int myInt = System.Math.Abs(-5);
Pozitif bir sayıyı negatif yapmak için eşdeğer bir yöntem var mı?
Yanıtlar:
Peki ya
myInt = myInt * -1
myInt = - Myint?
myInt *= - 1?
myShort = (short) -myShort, reddedildiğinde kısa bir int olur.
int myNegInt = System.Math.Abs(myNumber) * (-1);
int negInt = -System.Math.Abs(myInt)
myInt<0 ? myInt : -myInt;daha iyi. - operatörü uygun -1 * Numarası artı aşırı yükleme yetenekleri için bir kısayol olarak sağlandığından * (-1) bir numara yapmaz.
Başka bir şeyi negatif yaptığınız gibi: önüne negatif bir işaret koyun.
var positive = 6;
var negative = -positive;
int myNegInt = System.Math.Abs(myNumber) * (-1);
Yanıt veren herkese not
- Math.Abs(myInteger)
veya
0 - Math.Abs(myInteger)
veya
Math.Abs(myInteger) * -1
negatif sayıları negatif tutmanın ve pozitif sayıları negatif tutmanın bir yolu olarak.
Bu yaklaşımın tek bir kusuru vardır. Tüm tamsayılar için çalışmaz. Int32Tip aralığı "-2 31 " ile "2 31-1 arasındadır ." Bir "negatif" sayı daha var demektir. Sonuç olarak, Math.Abs(int.MinValue)atar OverflowException.
Doğru yol koşullu ifadeleri kullanmaktır:
int neg = n < 0 ? n : -n;
Bu yaklaşım "tümü" tamsayıları için geçerlidir.
Absmuhtemelen işe yaramayacak bir problemi (örneğin ) int.MinValueçözüyorsunuz ( intdönüş türünü varsayarak ). Bu durumda, bir istisna atmak tamamen sorun değildir. Ancak, bu özel sorunun "geçerli" bir sonucu vardır, int.MinValueancak Absrotayı alırsanız bir istisna atar .
nbir -32768sonra -nAYRICA olduğunu -32768!!! Ayrıca int neg = n < 0 ? n : -n;, üçlülerden biri kesinlikle hiçbir şey yapmadığından, her durumda çalışamaz.
Kolay yol:
myInt *= -1;
Daha fazla eğlence için:
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);
DÜZENLEME: Bu pozitif girdiler için yanlış ... -x (2s-Complement değeri) içindeki bitlerin geri kalanının + x cinsinden değerlerinin 'karşı' olduğunu unutmamakla hata yaptım. Yani sadece işaret bitini değiştirmek pozitif sayılar için ÇALIŞMAZ.
Bunu burada amaçlarla terk edeceğim ...
Veya zor yoldan (sanırım) ...
int y = x | ~ İnt.MaxValue;
cause int.MaxValue is 0111 1111 1111 1111 1111 1111 1111 1111
yani
~int.MaxValue is 1000 0000 0000 0000 0000 0000 0000 0000
ve dolayısıyla herhangi bir int32 Or'ed, işaret bitine 1 ekler, (negatif yapar) ve diğer tüm bitleri aynı bırakır ...
DÜZENLEME: aslında, 1000 0000 0000 0000 0000 0000 0000 0000 0000 aslında Minvalue olduğundan, bu da çalışmalıdır:
int y = x | int.MinValue; // or, to do it to itself,
x |= int.MinValue;
-number. 1hepsi sıfır ve bir. Ya da int.MinValuebununla sonuçlanması 10000000000000000000000000000001 ile sonuçlanacaktır -1(hepsi).
Burada partiye çok geç kalmama rağmen, donanım günlerimden bazı faydalı numaralarla karşılaşacağım. Bunların hepsi 2'nin imzalı sayılar için iltifatını varsayar.
int negate = ~i+1;
int positiveMagnitude = (i ^ (i>>31)) - (i>>31);
int negativeMagnitude = (i>>31) - (i ^ (i>>31));
i == int.MinValue, tüm değişkenler-2147483648
kullanırım myInt = -myInt;
Çok basit ve kolay
Eğer sadece pozitif olmak istiyorsanız
myInt = myInt>0 ? myInt : -myInt;
int.MaxValueolduğu için 2147483647bile bir taşma alacak , hatta var i = int.MaxValue; i++;alışkanlık
Sadece eğlence için:
int negativeInt = int.Parse(String.Format("{0}{1}",
"-", positiveInt.ToString()));
Güncelleme : Bu yaklaşımın güzelliği, onu bir istisna üreticisine kolayca yeniden aktarabilmenizdir:
int negativeInt = int.Parse(String.Format("{0}{1}",
"thisisthedumbestquestioninstackoverflowhistory", positiveInt.ToString()));
long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1);
Kimse bunun herhangi bir negatif sayı olması gerektiğini söylemedi .
-1 ile çarpın.
Daha önce de belirtildiği gibi, -1 ile çarpmak hoş değildir, int.MinValue * -1 == int.MinValue
Gerçekten uygulamanıza bağlıdır, ancak benim için (Ters Joystick eksenleri) tüm uçlara hala ulaşılabilir olmasını sağlamak ve mümkün olduğunca fazla sadakat sağlamak istiyorum.
Bu amaçla, Max <--> Min ile eşleştiriyorum ve aradaki her şeye bir * -1
Bu teknik kullanılarak, -32767 ters çevrilirken erişilemiyor.
private static int Invert(int value)
{
if (value == int.MaxValue) return int.MinValue;
if (value == int.MinValue) return int.MaxValue;
return value * -1;
}
5değil -5, ama 1/5.
İkili ve negatif işaretten sorumlu son bit kaldırmak için kullanın.
Veya bir veri tipine işaret eklemek için ikili veya kullanın.
Bu soluk saçma ve eksik gelebilir, ancak bunun en hızlı yöntem olduğunu garanti edebilirim.
Eğer ben bu yazı gönderdi ne denemiyorsanız bok görünebilir: D
Örneğin int için:
Int 32 bit veri tipidir, bu nedenle son bit (32th) işareti belirler.
Ve 32 yerde 0 ve dinlenme 1 değeri olan bir değer ile.
Tam tersi için ya da 32. sırada 1 olan bir değer ve dinlenme 0 için.
X=*-1tüm derleyiciler üzerinde çalışmayabilir ... NEGATİF yerine 'çarp' 'SUBTRACT' 1 okuduğundan daha iyi alt X=(0-X), [HANGİ FARKLIDIR X-=X]