दिलचस्प पोस्ट
एन्जोर 2 में एनजी के लिए जेसन ऑब्जेक्ट को पुनरावृत्ति करना यूनिकोड वर्णों को JavaScript से HTML में इमोजी के रूप में रेंडर करने से कैसे रोकें? MySQL में एक पूर्णांक अनुक्रम उत्पन्न करता है क्या खाली एचटीएमएलएक्स डेटा विशेषताएँ मान्य हैं? आखिरकार ब्लॉक में लौटाए गए वैरिएबल को क्यों बदलता है, वापसी मूल्य नहीं बदलता है? फ़ंक्शन कॉल और फ़ंक्शन संदर्भ में क्या अंतर है? TypeError: console.log.apply पर अवैध इनवॉइस पायथन में यूनिकोड वर्ण कैसे मुद्रित करें? रंग लुप्त होती एल्गोरिथ्म? मणि स्थापित: मणि देशी एक्सटेंशन बनाने में विफल (हेडर फाइल नहीं मिल सकती है) कैसे jQuery लोड () फ़ंक्शन के माध्यम से लोड तत्व का चयन करें? जेपीए "जेनटेबल" एनोटेशन स्थानीय होस्ट पर अपाचे के लिए मैं HTTPS को कैसे अनुमति देता हूं? सबस्ट्रस्ट और सबस्ट्रिंग के बीच अंतर क्या है? जावा में, मैं एक बाइट सरणी को हेक्स अंकों की स्ट्रिंग में कैसे बदलूं, जबकि अग्रणी शून्य रखते हुए?

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

क्या मैं मापांक गलत कर रहा हूं? क्योंकि जावा -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); } }