2010-01-08 11 views
7

निरपेक्ष मूल्य खोजने की कोशिश और मैंने सोचा बस के साथ '~' या कुछ और संकेत को उलटने के लिए एक सरल तरीका नहीं था।वहाँ ग में एक ऑपरेटर नकारात्मक सकारात्मक या ठीक इसके विपरीत करने के लिए एक पूर्णांक नाव आदि के हस्ताक्षर को बदलने के लिए नहीं है?

+0

क्या इसके पहले से ही नकारात्मक तो क्या होगा? वे रद्द कर देंगे? – nickthedude

+0

मैं उद्देश्य सी पता नहीं है, लेकिन अपने प्रश्न के आधार पर, वहाँ शायद एक पुस्तकालय समारोह है निरपेक्ष मूल्य प्राप्त करने के लिए ... पर हस्ताक्षर के साथ mucking मेरे लिए एक कोड गंध होगा। – overslacked

उत्तर

20
float newValue = oldValue * -1; 

या

float newValue = -(oldValue); //() aren't needed, I just use them out of habit 
10

संकेत को उलटने के लिए, उसके सामने ऋणात्मक डाल दिया।

+0

क्या डाउनवॉटर कृपया एक टिप्पणी छोड़ देगा। धन्यवाद। –

+0

2 डाउनवॉट्स किसी कारण से नहीं? आ जाओ! –

+0

शीर्षक सी में निषेध के लिए, प्रश्न की सामग्री को निरपेक्ष मूल्य के लिए पूछना, और कहीं और पोस्टर कहा सी के बजाय उद्देश्य सी आप उम्मीद नहीं कर सकते यदि आपका जवाब हर किसी को संतुष्ट करने के लिए कहता है। या कोई भी। या यहां तक ​​कि मूल पोस्टर भी। आपको ऐसा करना चाहिए था जैसा मैंने किया था। –

4

-x आप एक्स के साइन-उल्टे मूल्य दे देंगे।

1

x = 0 - एक्स;

? या मुझे बिंदु याद आती है?

8

एकल निषेध ऑपरेटर -(expr) आप क्या चाहते हैं वास्तव में करता है।

int x = -7; 
int y = 7; 
x = -x; // x is now 7 
y = -y; // y is now -7 

बिटवाइज़ पूरक ऑपरेटर ~(expr) है कि आप का उल्लेख है, दूसरे हाथ पर, इनपुट में बिट्स के सभी flips।

यदि यह मदद करता है, तो एक मुद्दा यह है कि जंगली अनदेखी में कई पूर्ण मूल्य कार्यान्वयन यह है कि दिए गए निश्चित आकार के दो नकारात्मक पूरक पूर्णांक प्रकार के सबसे नकारात्मक मूल्य को अस्वीकार कर दिया जाएगा।

+0

अच्छा जवाब ... –

+0

मैंने देखा कि यह टैग किया गया उद्देश्य-सी। मैंने मूल रूप से "सी में" ऑपरेटर के लिए पूछने के शीर्षक के संबंध में उत्तर दिया था। शुक्र है, "ऑब्जेक्टिव-सी सी के शीर्ष पर एक पतली परत है, और इसके अलावा सी यह की एक सख्त superset एक ऑब्जेक्टिव-सी संकलक के साथ किसी भी सी कार्यक्रम संकलित करने के लिए संभव है, और स्वतंत्र रूप से एक ऑब्जेक्टिव-सी भीतर सी कोड शामिल करने के लिए कक्षा।" http://en.wikipedia.org/wiki/Objective-C –

12

- काम करता है के साथ सरल निषेध, पर जवाब के सबसे तथ्य यह है कि ओपी निरपेक्ष मान करने के लिए कोशिश कर रहा है पर ध्यान नहीं दिया है। उसके लिए, सही उपकरण पूर्णांकों के लिए abs() और तैरता के लिए fabs() है। कोड क्रिस्टल स्पष्ट होगा और परिणाम आप उम्मीद करेंगे। (संपादित करें: इन उपकरणों के लिए प्रलेखन और बग को पढ़ना सुनिश्चित करें। निक निकलने के बाद, abs() के साथ सबसे नकारात्मक संख्या को नकारात्मक मानते हुए नकारात्मक नकारात्मक संख्या देता है।)

+0

सिद्धांत रूप में, मैं सहमत हूं और मैंने आपका उत्तर अप-वोट किया है। निस्संदेह, किसी को तर्कसंगत रूप से प्रोग्राम को समाप्त करने की उम्मीद है, या उठाए जाने का अपवाद, सबसे नकारात्मक पूर्णांक को अस्वीकार करने का प्रयास करते समय। Abs() के लिए लिंक किए गए दस्तावेज़ों में BUGS देखें। –

+0

@ निक: 'abs()' आईफोन पर जाल नहीं है; यह सिर्फ INT_MIN लौटाएगा। –

+0

@ निक: यह सी भावना में नहीं है। चूंकि स्ट्रॉस्ट्रप ने सी ++ के लिए इसी तरह के मामले में कहा, भाषा को तेज ऑपरेटर, और शायद चेक ऑपरेटर प्रदान करना चाहिए। यदि भाषा तेज ऑपरेटर प्रदान करती है, तो उपयोगकर्ता आवश्यकतानुसार चेक डाल सकता है, जबकि भाषा केवल चेक ऑपरेटर प्रदान करती है, तो उपयोगकर्ता को अनावश्यक होने पर और इसे तेज़ी से करने के दौरान चेक को हटाने का कोई तरीका नहीं है। यदि आप चाहें तो आप हमेशा 'int check_abs (int)' लिख सकते हैं। –

3

ट्रिकी विषय। फ़्लोटिंग पॉइंट नंबर पर हस्ताक्षर बदलने का सीधा तरीका चर के सबसे महत्वपूर्ण बिट के मान को फ़्लिप करना है। अन्य उत्तर में सूचीबद्ध अंकन संकलक, जो आमतौर पर ठीक है की दया पर है, लेकिन हमेशा नहीं। के लिए "फ्लोट एक्स", जवाब है:

*(unsigned int*)&x ^= (1<<31)

आप iPhone है, जो एक कॉर्टेक्स ए 8 प्रोसेसर (या यह कुछ ऐसा है) की तरह कुछ के लिए लिख रहे हैं, तो आप युगल से बचने के लिए है और यह भी से बचने के लिए चाहते हैं आंतरिक लूप में तैरने के साथ काम करते समय सशर्त। तो, आप यह कर सकते हैं:

*(unsigned int*)&x ^= ((x<0) << 31);

कौन सा एक शाखा अनुदेश का उपयोग किए बिना सकारात्मक को नकारात्मक हो जाएगा। इस एक आंतरिक पाश में है, तो यह एक और पद्धति का उपयोग करके, iPhone पर की तुलना में 5 से 20 गुना तेजी से हो जाएगा। यदि यह एक आंतरिक पाश में नहीं है, तो आप शायद बहुत ज्यादा परवाह नहीं करते हैं!

-1

यह एक भद्दा समाधान, यकीन नहीं कि यहां क्या हुआ है। सही के लिए abs() के साथ नीचे दिए गए उत्तर को देखें।

हालांकि इस एक पुराने सवाल है, शायद इस जवाब आप में से कुछ बाहर में मदद मिलेगी है।मैं एक नंबर एक और परिणाम के आधार पर की एक सकारात्मक या नकारात्मक मान होना चाहता था (मान लीजिए कि एक बूलियन mustBeNegative) जिस तरह से मैं यह है क्या किया:

int number = 7; 
if(mustBeNegative) 
{ 
     number = number * 1; 
} 
else 
{ 
     number = number * -1; 
} 

संख्या के आधार पर अपनी सकारात्मक या नकारात्मक मूल्य हो जाएगा " जरूरी है "मूल्य। जब संख्या पहले से ही ऋणात्मक संख्या थी तो यह सकारात्मक और वीजा बनाम बन जाएगा।

+0

यह एक ही समय में अत्यधिक जटिल है, और गलत है। – fishinear

+0

हाँ, सुनिश्चित नहीं है कि वहां क्या हुआ। अगर कोई पूछता है, इंटरनेट पर क्या चीज है जो आपको सबसे ज्यादा शर्मिंदा है? मैं अब से इस जवाब को इंगित करूंगा। – Matthijn

संबंधित मुद्दे