2016-04-19 8 views
5

मैं स्कैला के लिए नया हूं और स्केल ऑपरेटर तक पहुंचने की कोशिश कर रहा था। मुझे पता चला कि मैं लॉजिकल नॉट ऑपरेशन के लिए '-' ऑपरेटर का उपयोग कर सकता हूं। लेकिन कभी कभी यह ऑपरेटर मुझे एक नकारात्मक जवाब देता है, जैसे (-1)स्कैला में '~' ऑपरेटर का उपयोग करने से मुझे नकारात्मक मान

उदाहरण के लिए:

val x = 1 
val y =(~x) 

यहाँ मूल्य y मुझे एक -1 एक 0. के बजाय देता है लेकिन मैं में जवाब चाहिए 1 या 0 का रूप। क्या कोई मुझे बता सकता है कि मैं यहाँ क्या खो रहा हूं? अग्रिम में आपकी सहायता के लिए धन्यवाद।

+5

मैं उलझन में हूं: आपका प्रश्न (शीर्षक, पाठ) शून्य ऑपरेटर ('-') को संदर्भित करता है लेकिन आपका कोड नमूना tilde (' ~ ') का उपयोग करता है - यह कौन है? –

+0

@TzachZohar क्षमा करें। मैं '~' ऑपरेटर के बारे में बात कर रहा था। – Goldengirl

+0

आपको क्या लगता है कि 'Int.unary_ ~ 'एक लॉजिकल ऑपरेशन निष्पादित करता है? [प्रलेखन] (http://scala-lang.org/api/current/index.html#[email protected]_~: लंबा) कहता है "इस मूल्य के ** बिटवाईयर अस्वीकृति ** लौटाता है।" [दोनों] (http://stackoverflow.com/a/36693869/2988) [उत्तर] (http://stackoverflow.com/a/36694040/2988) आपके [अंतिम प्रश्न] पर (http://stackoverflow.com/q/36693811/2 9 88) कहें कि यह थोड़ा सा ऑपरेटर है। दोनों उत्तर दस्तावेज से लिंक करते हैं कि यह थोड़ा सा ऑपरेटर है। –

उत्तर

9

कई अन्य भाषाओं के विपरीत, स्काला संदर्भों जहां एक बूलियन की उम्मीद है में नंबर या मूल्यों के अन्य प्रकार का उपयोग कर समर्थन नहीं करता। उदाहरण के लिए, निम्नलिखित लाइनों में से कोई भी संकलन:

if (1) "foo" else "bar" 
if ("1") "foo" else "bar" 
if (List(1)) "foo" else "bar" 

कुछ भाषाओं में "truthiness" है कि निर्धारित करने के लिए शर्त रखती है यहां इस्तेमाल किया जा चाहते हैं की एक विचार है, लेकिन स्काला नहीं करता है-अगर आप एक बूलियन चाहते , आपको Boolean का उपयोग करने की आवश्यकता है।

इसका मतलब है कि सामान्य तार्किक अस्वीकृति संख्याओं के लिए समझ में नहीं आता है, और ~ कुछ अलग है - यह आपको थोड़ा सा नकारात्मकता देता है, जो आप चाहते हैं। इसके बजाय यह संभावना लगती है आप कुछ इस तरह हैं:

val x = 1 
val nonzeroX = x != 0 
val y = !nonzeroX 

अर्थात, और आप स्पष्ट रूप से एक बूलियन मान में अपना नंबर बदलने और फिर उस का उपयोग कर मानक तार्किक निषेध (!) के साथ काम करते हैं।

3

~ बिटवाई-निषेध है, यह दिया गया है कि प्रत्येक दिए गए नंबर का प्रत्येक बिट लेता है और इसे अस्वीकार करता है, प्रत्येक 0-बिट को 1-बिट में बदलता है और प्रत्येक 1-बिट 0-बिट में बदल जाता है। चूंकि हस्ताक्षरित संख्या का पहला भाग इसके संकेत (सकारात्मक संख्याओं के लिए 0, नकारात्मक के लिए 1) दर्शाता है, इससे सकारात्मक संख्याएं और शून्य नकारात्मक हो जाता है (और इसके विपरीत)।

यदि आप सरल तार्किक अस्वीकृति चाहते हैं, तो बस बूलियन और ! का उपयोग करें।

पीएस: ध्यान दें कि आपके द्वारा पोस्ट किए गए कोड में y का मान -2 होगा, -1 जैसा कि आपने अपनी पोस्ट में लिखा था।

2

यदि आप इसे 0 से 1 पर परिवर्तित करना चाहते हैं या इसके विपरीत आप ^ (XOR) ऑपरेटर का उपयोग कर सकते हैं।

val x = 1 
val y = 1^x 
संबंधित मुद्दे