ভূমিকা
সমস্যাটি পূর্ণসংখ্যার ওভারফ্লো। যদি এটি উপচে পড়ে তবে এটি সর্বনিম্ন মানটিতে ফিরে যায় এবং সেখান থেকে অবিরত থাকে। যদি এটি প্রবাহিত হয় তবে এটি সর্বাধিক মানটিতে ফিরে যায় এবং সেখান থেকে অবিরত থাকে। নীচের চিত্রটি একটি ওডোমিটারের। আমি ওভারফ্লোগুলি ব্যাখ্যা করতে এটি ব্যবহার করি। এটি যান্ত্রিক ওভারফ্লো তবে এটি এখনও একটি ভাল উদাহরণ।
একটি ওডোমিটারে, তাই max digit = 9
, সর্বোচ্চ উপায় ছাড়িয়ে যাওয়া 9 + 1
, যা বহন করে এবং দেয় 0
; তবে 1
একটিতে পরিবর্তনের জন্য কোনও উচ্চতর অঙ্ক নেই , তাই কাউন্টারটি পুনরায় সেট করে zero
। আপনি ধারণাটি পান - "পূর্ণসংখ্যার ওভারফ্লোস" এখন মনে পড়ে।
টাইপ এর বৃহত্তম দশমিক আক্ষরিক 2147483647 (2 31 -1)। 0 থেকে 2147483647 পর্যন্ত সমস্ত দশমিক আক্ষরিক কোথাও উপস্থিত হতে পারে যেখানে কোনও অন্তর্গত আক্ষরিক উপস্থিত হতে পারে, তবে আক্ষরিক 2147483648 কেবল অ্যানারি নেগ্রেশন অপারেটরের অপারেন্ড হিসাবে উপস্থিত হতে পারে -।
যদি একটি পূর্ণসংখ্যার সংযোজন ওভারফ্লো হয়, তবে ফলাফলটি গাণিতিক যোগফলের নিম্ন-অর্ডার বিট হিসাবে কিছু যথেষ্ট বড় দুটি এর পরিপূরক বিন্যাসে উপস্থাপিত হয়। যদি ওভারফ্লো হয়, তবে ফলাফলটির সাইন দুটি অপরেন্ড মানগুলির গাণিতিক যোগফলের চিহ্ন হিসাবে একই নয়।
সুতরাং, 2147483647 + 1
ওভারফ্লো এবং চারপাশে মোড়ানো -2147483648
। অতএব int i=2147483647 + 1
উপচে পড়া হবে, যা এর সমান নয় 2147483648
। এছাড়াও, আপনি বলেছেন "এটি সর্বদা 0 প্রিন্ট করে"। এটি হয় না, কারণ http://ideone.com/WHrQIW । নীচে, এই 8 টি সংখ্যাটি যে বিন্দুতে এটি পিভটস এবং উপচে পড়েছে তা দেখায়। এটি 0s মুদ্রণ শুরু হয়। এছাড়াও, এটি কত দ্রুত গণনা করে অবাক হবেন না, আজকের মেশিনগুলি দ্রুত।
268435456
536870912
1073741824
-2147483648
0
0
0
0
কেন পূর্ণসংখ্যা ওভারফ্লো "চারপাশে মোড়ানো"
আসল পিডিএফ