दिलचस्प पोस्ट
सादा पाठ के रूप में HTML टैग कैसे प्रदर्शित करें क्या यह सिर्फ अपने गुणों के बजाय जावास्क्रिप्ट प्रोटोटाइप ऑब्जेक्ट को निर्दिष्ट करना ठीक है? पूर्णांक आधारित पावर फ़ंक्शन पॉ (एएनटी, इंट) को लागू करने का सबसे कारगर तरीका एंड्रॉइड एम के रनटाइम अनुमतियों में पूछने से हम कभी-कभी कैसे पूछेंगे? 330 त्रुटि (शुद्ध :: ERR_CONTENT_DECODING_FAILED): UnsupportedClassVersionError का कारण क्या है? स्टोरीबोर्ड स्थैतिक कोशिकाएं: dequeueReusableCellWithIdentifier रिटर्न शून्य Urllib2.urlopen पर उपयोगकर्ता एजेंट बदलना क्या MySQL क्वेरी में 'LIMIT 1' को जोड़ना उनको तेज़ी से बना देता है जब आप जानते हैं कि केवल 1 परिणाम होगा? कैसे एक लगातार अलार्म प्रबंधक बनाने के लिए ईज़ीबी के साथ @ फेससवालिस्ट को इंजेक्ट कैसे करें, @ पेरिसेंस कंटैक्सस्ट, @ इंजेक्ट, @ एटोवेल्ड NSPopover पर NSTextField को संपादित करने में सक्षम नहीं होने के बावजूद भी संपादन योग्य व्यवहार सेट है ब्लॉब से अर्रेबफर तक कैसे जाना है फ्रिज कॉल में स्विफ्ट में पैरामीटर नाम की आवश्यकता क्यों है? उपयोगकर्ताओं को एंड्रॉइड ऐप अपडेट के बारे में कैसे जानकारी दें?

कैसे जावा नकारात्मक संख्या के साथ माप गणना करता है?

क्या मैं मापांक गलत कर रहा हूं? क्योंकि जावा -13 % 64 इसका मूल्यांकन करना -13 लेकिन मुझे 51 मिलता है।

Solutions Collecting From Web of "कैसे जावा नकारात्मक संख्या के साथ माप गणना करता है?"

नकारात्मक संख्याओं के मापांक की दोनों परिभाषाएं उपयोग में हैं – कुछ भाषाएं एक परिभाषा और कुछ अन्य का उपयोग करती हैं

यदि आप नकारात्मक इनपुट के लिए एक नकारात्मक संख्या प्राप्त करना चाहते हैं तो आप इसका उपयोग कर सकते हैं:

 int r = x % n; if (r > 0 && x < 0) { r -= n; } 

इसी तरह यदि आप एक ऐसी भाषा का उपयोग कर रहे थे जो नकारात्मक इनपुट पर नकारात्मक संख्या देता है और आप सकारात्मक पसंद करते हैं:

 int r = x % n; if (r < 0) { r += n; } 

चूंकि "गणितीय" दोनों सही हैं:

 -13 % 64 = -13 (on modulus 64) -13 % 64 = 51 (on modulus 64) 

एक विकल्प जावा भाषा डेवलपर्स द्वारा चुना जाना था और उन्होंने चुना है:

परिणाम का चिन्ह लाभांश के संकेत के बराबर है।

यह जावा चश्मा में कहते हैं:

https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17.3

क्या आप वाकई जावा में काम कर रहे हैं? 'कारण जावा अपेक्षा करता है -13% 64 = -13 देता है लाभांश का संकेत!

जावा के लिए आपका परिणाम गलत है कृपया कुछ संदर्भ प्रदान करें कि आप इसे कैसे पहुंचे (आपके प्रोग्राम, कार्यान्वयन और जावा का संस्करण)।

जावा भाषा विशिष्टता से

15.17.3 शेष ऑपरेटर%
[…]
बाइनरी सांख्यिक पदोन्नति (§5.6.2) के बाद पूर्णांक वाले ऑपरेंसेस के लिए शेष ऑपरेशन एक परिणाम मान उत्पन्न करता है जैसे कि (ए / बी) * बी + (एक% बी) एक के बराबर है।

15.17.2 डिवीजन ऑपरेटर /
[…]
पूर्णांक विभाजन की ओर 0 की ओर जाता है

चूंकि / शून्य पर शून्य (परिणामस्वरूप शून्य) है, इस मामले में% का नतीजा नकारात्मक होना चाहिए।

आप उपयोग कर सकते हैं

 (x % n) - (x < 0 ? n : 0); 

आपका जवाब विकिपीडिया: मॉड्यूलो ऑपरेशन में है

यह कहते हैं, जावा में मॉड्यूलो ऑपरेशन पर हस्ताक्षर लाभांश के समान है। और चूंकि हम बात कर रहे हैं बाकी विभाजन ऑपरेशन के बारे में अभी ठीक है, यह आपके मामले में -13 देता है, क्योंकि -13/64 = 0. -13-0 = -13

संपादित करें: क्षमा करें, आपके प्रश्न को गलत समझाया … आप सही हैं, जावा को -13 देना चाहिए क्या आप और आसपास के कोड प्रदान कर सकते हैं?

मॉड्यूलो अंकगणित नकारात्मक परिपथों के साथ भाषा डिजाइनर द्वारा परिभाषित किया जाता है, जो भाषा कार्यान्वयन में छोड़ सकते हैं, जो कि सीपीयू वास्तुकला की परिभाषा को स्थगित कर सकते हैं।

मुझे जावा भाषा की परिभाषा नहीं मिल पाई थी
ईश्तेर धन्यवाद, शेष ऑपरेटर% के लिए जावा भाषा विशिष्टता का कहना है कि परिणाम का चिन्ह अंश के संकेत के समान है।

x = x + m = x - m मापांक m
तो माप -13 = -13 + 64 और मॉड्यूलस 64 -13 = 51
Z = X * d + r ग्रहण करें, यदि 0 < r < X तो विभाजन Z/X हम शेष r कहते हैं
Z % X Z/X शेष देता है

इस पर काबू पाने के लिए, आप 64 (या जो भी आपके मापांक आधार है) नकारात्मक मूल्य तक जोड़ सकते हैं जब तक कि यह सकारात्मक न हो

 int k = -13; int modbase = 64; while (k < 0) { k += modbase; } int result = k % modbase; 

परिणाम अभी भी समान समकक्ष वर्ग में होगा।

मॉड फ़ंक्शन को उस राशि के रूप में परिभाषित किया जाता है, जिसके द्वारा एक संख्या विभाजक के सबसे अधिक पूर्णांक एकाधिक से अधिक है जो उस नंबर से अधिक नहीं है। तो आपके मामले में

 -13 % 64 

64 का सबसे बड़ा पूर्णांक है जो -13 से अधिक नहीं है -64 है अब, जब आप -64 से -19 से घटाते हैं, तो यह बराबर 51 -13 - (-64) = -13 + 64 = 51 होता है -13 - (-64) = -13 + 64 = 51

जावा जेडीके के अपने संस्करण में 1.8.0_05 -13% 64 = -13

आप दूसरे शब्दों में -13- (int (-13/64)) की कोशिश कर सकते हैं, तो अंश को छुटकारा पाने के लिए एक पूर्णांक को विभाजित करते हैं तो अंश से घटाते हैं तो अंश – (इंट (अंश / अंक)) को सही देना चाहिए शेष और हस्ताक्षर

जावा नवीनतम संस्करणों में आपको -13%64 = -13 मिलता है उत्तर में हमेशा अंश का संकेत होगा

जेएलएस के खंड 15.17.3 के अनुसार, "बाइनरी सांख्यिक पदोन्नति के बाद पूर्णांकों वाले ऑपरेंसेस के लिए शेष परिचालन परिणाम मूल्य उत्पन्न करता है जैसे कि (ए / बी) * बी + (एक% बी) एक के बराबर है। यह पहचान भी धारण करती है विशेष मामले में कि लाभांश इसकी प्रकार के लिए सबसे बड़ा संभावित परिमाण का नकारात्मक पूर्णांक है और विभाजक -1 (शेष 0 है)। "

उम्मीद है की वो मदद करदे।

मुझे नहीं लगता कि जावा इस मामले में 51 लौटाता है। मैं मैक पर जावा 8 चला रहा हूं और मुझे मिल रहा है:

 -13 % 64 = -13 

कार्यक्रम:

 public class Test { public static void main(String[] args) { int i = -13; int j = 64; System.out.println(i % j); } }