Anda dapat mengonversi angka negatif ke positif seperti ini:
int myInt = System.Math.Abs(-5);
Apakah ada metode yang setara untuk membuat angka positif menjadi negatif?
Anda dapat mengonversi angka negatif ke positif seperti ini:
int myInt = System.Math.Abs(-5);
Apakah ada metode yang setara untuk membuat angka positif menjadi negatif?
Jawaban:
Bagaimana tentang
myInt = myInt * -1
myInt = - Myint?
myInt *= - 1?
myShort = (short) -myShortpemeran diperlukan karena short menjadi int ketika dinegasi.
int myNegInt = System.Math.Abs(myNumber) * (-1);
int negInt = -System.Math.Abs(myInt)
myInt<0 ? myInt : -myInt;jauh lebih baik. Hanya karena - operator disediakan sebagai kependekan dari -1 * * yang tepat ditambah kemampuan kelebihan beban, tidak membuat * (-1) trik.
Cara yang sama Anda membuat hal lain menjadi negatif: letakkan tanda negatif di depannya.
var positive = 6;
var negative = -positive;
int myNegInt = System.Math.Abs(myNumber) * (-1);
Catatan untuk semua orang yang merespons
- Math.Abs(myInteger)
atau
0 - Math.Abs(myInteger)
atau
Math.Abs(myInteger) * -1
sebagai cara untuk menjaga angka negatif tetap negatif dan berubah menjadi negatif.
Pendekatan ini memiliki satu kelemahan. Ini tidak berfungsi untuk semua bilangan bulat. Kisaran Int32jenisnya dari "-2 31 " hingga "2 31 - 1." Ini berarti ada satu lagi angka "negatif". Akibatnya, Math.Abs(int.MinValue)melempar OverflowException.
Cara yang benar adalah dengan menggunakan pernyataan kondisional:
int neg = n < 0 ? n : -n;
Pendekatan ini berfungsi untuk bilangan bulat "semua".
Abs) yang tidak mungkin berhasil int.MinValue(dengan asumsi inttipe pengembalian.) Dalam hal itu, sama sekali tidak masalah untuk melempar pengecualian. Namun, masalah khusus ini memiliki hasil "valid" untuk int.MinValuetetapi melempar pengecualian jika Anda mengambil Absrute.
nadalah -32768kemudian -nadalah JUGA -32768!!! Terlebih lagi int neg = n < 0 ? n : -n;tidak mungkin bekerja dalam semua kasus, karena salah satu terner tidak melakukan apa pun.
Cara mudah:
myInt *= -1;
Hanya untuk lebih bersenang-senang:
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);
EDIT: Ini salah untuk input positif ... Saya membuat kesalahan dengan lupa bahwa sisa bit di -x (nilai 2s-Complement) adalah 'kebalikan' dari nilai mereka di + x, tidak sama. JADI cukup mengubah bit tanda TIDAK akan bekerja untuk angka positif.
Saya akan meninggalkan ini di sini untuk keperluan ...
Atau cara yang rumit (saya pikir) ...
int y = x | ~ int.MaxValue;
cause int.MaxValue is 0111 1111 1111 1111 1111 1111 1111 1111
begitu
~int.MaxValue is 1000 0000 0000 0000 0000 0000 0000 0000
dan karena itu setiap int32 Or'ed dengan itu akan menempatkan 1 di bit tanda, (membuatnya negatif), dan meninggalkan semua bit lainnya sama ...
SUNTING: sebenarnya, Karena 1000 0000 0000 0000 0000 0000 0000 0000 sebenarnya adalah Minvalue, ini juga harus berfungsi:
int y = x | int.MinValue; // or, to do it to itself,
x |= int.MinValue;
-number. 1semua nol dan satu. Atau dengan itu int.MinValueakan menghasilkan 1000000000000000000000000000000001 yang tidak sama dengan -1(semuanya).
Meskipun saya jauh terlambat ke pesta di sini, saya akan berpadu dengan beberapa trik berguna dari hari-hari perangkat keras saya. Semua ini menganggap representasi pujian 2 untuk nomor yang ditandatangani.
int negate = ~i+1;
int positiveMagnitude = (i ^ (i>>31)) - (i>>31);
int negativeMagnitude = (i>>31) - (i ^ (i>>31));
i == int.MinValue, maka semua variabel-2147483648
Hanya untuk bersenang-senang:
int negativeInt = int.Parse(String.Format("{0}{1}",
"-", positiveInt.ToString()));
Pembaruan : keindahan dari pendekatan ini adalah Anda dapat dengan mudah mengubahnya menjadi generator pengecualian:
int negativeInt = int.Parse(String.Format("{0}{1}",
"thisisthedumbestquestioninstackoverflowhistory", positiveInt.ToString()));
saya menggunakan myInt = -myInt;
Sangat sederhana dan mudah
Kalau mau hanya positif
myInt = myInt>0 ? myInt : -myInt;
int.MaxValueitu 2147483647, bahkan var i = int.MaxValue; i++;tidak akan berhasil
long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1);
Tidak ada yang mengatakan itu pasti angka negatif tertentu .
Mungkin ini?
int n;
.... some coding....
n = n<=0? n:0-n;
Lipat gandakan dengan -1.
Seperti yang disebutkan sebelumnya, hanya mengalikan dengan -1 tidak keren, seperti int.MinValue * -1 == int.MinValue
Ini benar-benar tergantung pada aplikasi Anda, tetapi untuk aplikasi saya (Inverting Joystick axes) Saya ingin memastikan bahwa semua ekstrem masih dapat dijangkau, dan mempertahankan kesetiaan sebanyak mungkin.
Untuk tujuan ini, saya memetakan Max <--> Min dan semua yang ada di * -1
dalamnya mendapat a Menggunakan teknik ini, -32767 tidak dapat dijangkau saat membalikkan.
private static int Invert(int value)
{
if (value == int.MaxValue) return int.MinValue;
if (value == int.MinValue) return int.MaxValue;
return value * -1;
}
5tidak -5, tapi 1/5.
Gunakan biner dan untuk menghapus bit terakhir yang bertanggung jawab untuk tanda negatif.
Atau gunakan biner atau untuk menambahkan tanda ke tipe data.
Soln ini mungkin terdengar absurd dan tidak lengkap tetapi saya dapat menjamin ini adalah metode tercepat.
Jika Anda tidak bereksperimen dengan apa yang saya poskan posting ini mungkin terlihat omong kosong: D
Misalnya untuk int:
Int adalah datatype 32 bit sehingga bit terakhir (32th) menentukan tanda.
Dan dengan nilai yang memiliki 0 di 32 tempat dan sisanya 1. Ini akan mengkonversi negatif menjadi + ve.
Untuk kebalikannya atau dengan nilai dengan 1 di tempat ke-32 dan istirahat 0.
X=*-1mungkin tidak bekerja pada semua kompiler ... karena ia membaca 'multiply' 'SUBTRACT' 1 bukannya NEGATIF Alt yang lebih baik adalah X=(0-X), [YANG BERBEDA DARI X-=X]