Integer Arithmetic और Overflow
integer division, modulus, overflow के व्यवहार और उसे पहचानने के तरीकों को समझें।
Integer Arithmetic और Overflow, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
पूर्णांक अंकगणित और अतिप्रवाह
Java के पूर्णांकों का आकार निश्चित होता है। जब कोई गणना अधिकतम या न्यूनतम मान से बाहर चली जाती है, तो वह चुपचाप चक्राकार रूप से बदल जाती है — कोई अपवाद उत्पन्न नहीं होता। इसे समझने से सूक्ष्म त्रुटियों को रोकने में सहायता मिलती है।
पूर्णांक सीमाएँ
प्रत्येक पूर्णांक प्रकार की सीमा उसकी बिट चौड़ाई से निर्धारित होती है:
byte: -128 से 127short: -32,768 से 32,767int: -2,147,483,648 से 2,147,483,647long: -9.2 × 10^18 से 9.2 × 10^18
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Integer.MIN_VALUE); // -2147483648
System.out.println(Long.MAX_VALUE); // 9223372036854775807
System.out.println(Byte.MAX_VALUE); // 127अतिप्रवाह: चुपचाप चक्राकार परिवर्तन
Integer.MAX_VALUE में 1 जोड़ने पर मान चक्राकार होकर Integer.MIN_VALUE बन जाता है। यह टू-कॉम्प्लिमेंट अंकगणित है — Java इसकी कोई गारंटी नहीं देता और कोई अपवाद उत्पन्न नहीं करता।
int max = Integer.MAX_VALUE;
System.out.println(max + 1); // -2147483648 (overflow!)
byte b = 127;
b++; // wraps to -128
System.out.println(b); // -128
// Real bug: counting votes in a large election with int
int votes = Integer.MAX_VALUE;
votes += 100; // silently wrong
System.out.println(votes); // negative number!Math.addExact से अतिप्रवाह का पता लगाना
Java 8+ ने Math.addExact(), multiplyExact() और subtractExact() प्रस्तुत किए, जो चुपचाप चक्राकार परिवर्तन करने के बजाय अतिप्रवाह होने पर ArithmeticException उत्पन्न करते हैं।
try {
int result = Math.addExact(Integer.MAX_VALUE, 1);
} catch (ArithmeticException e) {
System.out.println("Overflow detected!"); // prints this
}
try {
long safe = Math.multiplyExact(100_000L, 100_000L);
System.out.println(safe); // 10000000000
} catch (ArithmeticException e) {
System.out.println("Multiply overflow");
}पूर्णांक विभाजन और शेषफल
पूर्णांक विभाजन शून्य की ओर काटा जाता है। % ऑपरेटर भाज्य के चिह्न वाला शेषफल देता है। शून्य से विभाजन से सावधान रहें — यह ArithmeticException उत्पन्न करता है।
System.out.println(10 / 3); // 3 (not 3.33)
System.out.println(10 % 3); // 1
System.out.println(-10 % 3); // -1 (sign follows dividend)
System.out.println(-10 % -3); // -1
try {
int x = 5 / 0; // ArithmeticException: / by zero
} catch (ArithmeticException e) {
System.out.println(e.getMessage()); // / by zero
}
// Float division by zero gives Infinity, not exception
System.out.println(5.0 / 0); // Infinityबड़ी संख्याओं के लिए Long अंकगणित
जब मान int की सीमा से अधिक हो सकते हों, तो long का उपयोग करें। असाइनमेंट से पहले अतिप्रवाह रोकने के लिए long शाब्दिक मानों के अंत में हमेशा L लगाएँ।
// Bug: multiplication done as int, then widened
long wrong = 1_000_000 * 1_000_000; // overflows int!
System.out.println(wrong); // -727379968 (wrong!)
// Fix: one operand is long
long correct = 1_000_000L * 1_000_000L;
System.out.println(correct); // 1000000000000
// Or cast first
long alsOk = (long) 1_000_000 * 1_000_000;
System.out.println(alsOk); // 1000000000000बिट शिफ्ट ऑपरेटर
बिट शिफ्ट ऑपरेटर 2 की घातों से गुणा या भाग करने के तेज़ तरीके हैं:
n << k— बाएँ शिफ्ट: 2^k से गुणाn >> k— चिह्नित दाएँ शिफ्ट: 2^k से भागn >>> k— अचिह्नित दाएँ शिफ्ट: 0 से भरता है
int n = 8;
System.out.println(n << 1); // 16 (8 * 2)
System.out.println(n << 2); // 32 (8 * 4)
System.out.println(n >> 1); // 4 (8 / 2)
System.out.println(n >> 2); // 2 (8 / 4)
// Check if number is power of 2
boolean isPow2 = n > 0 && (n & (n - 1)) == 0;
System.out.println(isPow2); // trueबिट-स्तरीय AND, OR, XOR
बिट-स्तरीय ऑपरेटर अलग-अलग बिट पर काम करते हैं और अनुमतियों, फ़्लैग तथा निम्न-स्तरीय प्रोटोकॉल में उपयोग किए जाते हैं।
int a = 0b1010; // 10
int b = 0b1100; // 12
System.out.println(Integer.toBinaryString(a & b)); // 1000 (AND = 8)
System.out.println(Integer.toBinaryString(a | b)); // 1110 (OR = 14)
System.out.println(Integer.toBinaryString(a ^ b)); // 0110 (XOR = 6)
System.out.println(Integer.toBinaryString(~a)); // ...11110101 (NOT)
// Permission flags example
int READ = 0b001;
int WRITE = 0b010;
int EXEC = 0b100;
int perms = READ | WRITE; // user has read+write
System.out.println((perms & EXEC) != 0); // false — no execसंख्यात्मक शाब्दिक मानों में अंडरस्कोर
Java 7+ पठनीयता बढ़ाने के लिए संख्यात्मक शाब्दिक मानों में अंडरस्कोर की अनुमति देता है। कंपाइलर इन्हें अनदेखा कर देता है।
int million = 1_000_000;
long creditCard = 4_111_1111_1111_1111L;
double pi = 3.141_592_653_589_793;
int hex = 0xFF_EC_D1_2E;
int binary = 0b0001_0101_0110;
System.out.println(million); // 1000000
System.out.println(creditCard); // 4111111111111111मनमानी परिशुद्धता के लिए BigInteger
जब मान long से भी बड़े हों, तो BigInteger का उपयोग करें। इसमें अतिप्रवाह नहीं होता, लेकिन यह प्रिमिटिव प्रकारों से धीमा होता है। इसका उपयोग क्रिप्टोग्राफ़िक कुंजियों, फैक्टोरियल और खगोलीय संख्याओं के लिए करें।
import java.math.BigInteger;
BigInteger factorial100 = BigInteger.ONE;
for (int i = 2; i <= 100; i++) {
factorial100 = factorial100.multiply(BigInteger.valueOf(i));
}
System.out.println(factorial100.toString().length() + " digits"); // 158 digits
BigInteger a = new BigInteger("999999999999999999999999999999");
BigInteger b = new BigInteger("1");
System.out.println(a.add(b)); // 1000000000000000000000000000000व्यावहारिक: अतिप्रवाह-सुरक्षित गणक
Math.addExact का उपयोग करके और अतिप्रवाह होने पर Long.MAX_VALUE पर वापस जाकर अतिप्रवाह को सुरक्षित रूप से संभालने वाले गणक को लागू करने का एक पैटर्न।
class SafeCounter {
private long count = 0;
public void increment() {
try {
count = Math.addExact(count, 1L);
} catch (ArithmeticException e) {
count = Long.MAX_VALUE; // cap at max
}
}
public long get() { return count; }
}
SafeCounter sc = new SafeCounter();
sc.increment();
sc.increment();
System.out.println(sc.get()); // 2त्वरित जाँच
निम्नलिखित व्यंजक का मान क्या है?
long result = 1_000_000 * 1_000_000; System.out.println(result);
पुनरावलोकन: पूर्णांक अंकगणित और अतिप्रवाह
मुख्य बातें:
- पूर्णांक अतिप्रवाह चुपचाप चक्राकार हो जाता है — डिफ़ॉल्ट रूप से कोई अपवाद नहीं आता
- अतिप्रवाह पकड़ने के लिए Math.addExact/multiplyExact/subtractExact का उपयोग करें
- पूर्णांक विभाजन शून्य की ओर काटता है; % का चिह्न भाज्य के चिह्न का अनुसरण करता है
- जब बीच के परिणाम int में अतिप्रवाह कर सकते हों, तब long शाब्दिक मान (L प्रत्यय) का उपयोग करें
- BigInteger अतिप्रवाह के बिना मनमाने रूप से बड़े मानों को संभालता है
- बिट-शिफ्ट ऑपरेटर 2 की घात से गुणा या भाग करने के तेज़ विकल्प हैं
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “Integer Arithmetic और Overflow” पाठ निःशुल्क है?
हाँ—“Integer Arithmetic और Overflow” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Integer Arithmetic और Overflow” में मैं क्या सीखूँगा?
integer division, modulus, overflow के व्यवहार और उसे पहचानने के तरीकों को समझें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“Integer Arithmetic और Overflow” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Math class की आवश्यक बातें
- Integer Arithmetic और Overflow
- वित्तीय गणनाओं के लिए BigDecimal
- NumberFormat और printf