आप इस तरह एक ऋणात्मक संख्या को धनात्मक में बदल सकते हैं:
int myInt = System.Math.Abs(-5);
वहाँ एक सकारात्मक संख्या नकारात्मक बनाने के लिए एक समान विधि है?
आप इस तरह एक ऋणात्मक संख्या को धनात्मक में बदल सकते हैं:
int myInt = System.Math.Abs(-5);
वहाँ एक सकारात्मक संख्या नकारात्मक बनाने के लिए एक समान विधि है?
जवाबों:
कैसा रहेगा
myInt = myInt * -1
myInt = - Myint?
myInt *= - 1?
myShort = (short) -myShortकास्ट आवश्यक है क्योंकि शॉर्ट को नकारात्मक होने पर इंट बन जाता है।
int myNegInt = System.Math.Abs(myNumber) * (-1);
int negInt = -System.Math.Abs(myInt)
myInt<0 ? myInt : -myInt;ज़्यादा बेहतर है। सिर्फ इसलिए कि - ऑपरेटर को उचित -1 * नंबर प्लस ओवरलोडिंग क्षमताओं के लिए शॉर्टहैंड के रूप में प्रदान किया जाता है, यह * (-1) एक चाल नहीं बनाता है।
जिस तरह से आप किसी और चीज को नकारात्मक बनाते हैं: उसके सामने एक नकारात्मक संकेत डालें।
var positive = 6;
var negative = -positive;
उन सभी के लिए ध्यान दें, जिन्होंने जवाब दिया
- Math.Abs(myInteger)
या
0 - Math.Abs(myInteger)
या
Math.Abs(myInteger) * -1
नकारात्मक संख्याओं को नकारात्मक रखने और सकारात्मक लोगों को नकारात्मक रूप देने का एक तरीका है।
इस दृष्टिकोण का एक ही दोष है। यह सभी पूर्णांकों के लिए काम नहीं करता है। की सीमा Int32प्रकार "-2 से है 31 " 2 करने के लिए " 31 - 1." इसका मतलब है कि एक और "नकारात्मक" संख्या है। नतीजतन, Math.Abs(int.MinValue)एक फेंकता हैOverflowException ।
सही तरीके सशर्त बयान का उपयोग करने के लिए है:
int neg = n < 0 ? n : -n;
यह दृष्टिकोण "सभी" पूर्णांक के लिए काम करता है।
Abs) हल कर रहे हैं जो संभवतः काम नहीं कर सकती है int.MinValue( intरिटर्न प्रकार मानकर ।) उस मामले में, अपवाद को फेंकना पूरी तरह से ठीक है। हालाँकि, इस विशिष्ट समस्या के लिए "मान्य" परिणाम है, int.MinValueलेकिन यदि आप Absमार्ग लेते हैं तो एक अपवाद को फेंक देता है ।
nहै -32768तो -nALSO -32768!!! इसके अलावा int neg = n < 0 ? n : -n;संभवतः सभी मामलों में काम नहीं कर सकता है, क्योंकि टर्नरीज़ में से एक बिल्कुल कुछ भी नहीं करता है।
आसान तरीका:
myInt *= -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-Complement value) + x में उनके मूल्य के 'विपरीत' हैं, समान नहीं। तो केवल साइन बिट को बदलने से सकारात्मक संख्याओं के लिए काम नहीं होगा।
मैं इस उद्देश्य के लिए यहाँ छोड़ दूँगा ...
या मुश्किल तरीका (मुझे लगता है) ...
पूर्णांक 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 वास्तव में Minvalue है, इसलिए यह काम करना चाहिए:
int y = x | int.MinValue; // or, to do it to itself,
x |= int.MinValue;
-number। 1सभी शून्य और एक है। इसके साथ-साथ इसका 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);
किसी ने भी यह नहीं कहा कि इसे कोई विशेष ऋणात्मक संख्या होना चाहिए ।
शायद यह?
int n;
.... some coding....
n = n<=0? n:0-n;
इसे 1 से गुणा करें।
जैसा कि पहले उल्लेख किया गया है, बस -1 से गुणा करना अच्छा नहीं है, जैसा कि int.MinValue * -1 == int.MinValue
यह वास्तव में आपके आवेदन पर निर्भर करता है, लेकिन मेरा (इन्वर्टिंग जॉयस्टिक कुल्हाड़ियों के लिए) मैं यह सुनिश्चित करना चाहता हूं कि सभी चरम अभी भी उपलब्ध हैं, और जितना संभव हो उतना निष्ठा बनाए रखें।
यह अंत करने के लिए, मैं मैक्स को मैप करता हूं <-> न्यूनतम और सब कुछ के बीच में * -1
इस तकनीक का उपयोग करके प्राप्त होता है, -32767 inverting के दौरान पहुंच से बाहर है।
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।
बाइनरी का उपयोग करें और अंतिम बिट को हटाने के लिए जो नकारात्मक संकेत के लिए जिम्मेदार है।
या बाइनरी का उपयोग करें या डेटाटाइप में संकेत जोड़ने के लिए।
यह सॉल्यूशन बेतुका और अधूरा लग सकता है लेकिन मैं गारंटी दे सकता हूं कि यह सबसे तेज तरीका है।
यदि आपने इस पोस्ट के साथ प्रयोग नहीं किया है तो यह पोस्ट बकवास लग सकती है: D
उदाहरण के लिए:
Int 32 बिट डेटाटाइप है इसलिए अंतिम बिट (32 वां एक) संकेत निर्धारित करता है।
और एक मान के साथ जिसमें 32 स्थान में 0 है और बाकी 1. यह ऋणात्मक संख्या + में नहीं बदलेगा।
32 वें स्थान पर 1 और बाकी 0 के साथ सिर्फ विपरीत या एक मूल्य के लिए।
X=*-1सभी कंपाइलरों पर काम नहीं हो सकता है ... क्योंकि यह NEGATIVE के बजाय एक 'गुणा' 'SUBTRACT' 1 को पढ़ता है X=(0-X), बेहतर ऊंचाई है , [जो कि अलग है X-=X]