दिलचस्प पोस्ट
सी मैक्रो परिभाषा बड़े endian या थोड़ा endian मशीन निर्धारित करने के लिए? JPanel पृष्ठभूमि के रूप में छवि को सेट करने का सबसे सरल तरीका setteext पाठ के रूप में किसी संख्या को पाठ दृश्य में दिखाने में विफल रहता है Angular2 + टाइपस्क्रिप्ट एप्लिकेशन में रद्दी का आयात करना jquery एक लंगर करने के लिए चिकनी स्क्रॉल? कैसे वर्तमान पंक्ति को jqgrid में जारी रखने के लिए क्या आप कभी जावा में वाष्पशील कीवर्ड का उपयोग करते हैं? जे 2 एमई / एंड्रॉइड / ब्लैकबेरी – ड्राइविंग दिशानिर्देश, दो स्थानों के बीच मार्ग जावास्क्रिप्ट में वैश्विक चर से कैसे बचें? MySQL में "collations के गैरकानूनी मिश्रण" समस्या निवारण पिक्चरबॉक्स पर पारदर्शी नियंत्रण अजगर के साथ जावास्क्रिप्ट द्वारा जेनरेट किया गया स्क्रैप HTML सीडी में लिनक्स पर स्टड-आउट धागा सुरक्षित? एमएस एक्सेस में अपसेट करना आवरण वस्तुओं की तुलना करने के लिए जावा में == ऑपरेटर का उपयोग करना

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

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

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

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

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

 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); } }