Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ระบบเลขฐานสอง - ล้นในการบวกเลขคณิตใน C / C ++?


Complement Number System ของ 2 ถูกนำไปใช้อย่างกว้างขวางในสถาปัตยกรรมคอมพิวเตอร์

ระบบหมายเลขเสริมของ N-bit 2 สามารถแสดงตัวเลขได้ตั้งแต่ -2n-1 ถึง 2n-1- 1

4 บิตสามารถแสดงตัวเลขได้ตั้งแต่ ( -8 ถึง 7)

5 บิตสามารถแสดงตัวเลขตั้งแต่ ( -16 ถึง 15 ) ในระบบเสริมของ 2

โอเวอร์โฟลว์เกิดขึ้นจากการบวกเมื่อมีการเพิ่ม Complement Numbers ของ 2 N-bit 2 และคำตอบนั้นใหญ่เกินกว่าจะใส่ลงในกลุ่ม N-bit นั้นได้

คอมพิวเตอร์มีการลงทะเบียน N-Bit Fixed ผลการเพิ่ม N-Bit Number สองตัวจะส่งผลให้จำนวน N+1 Bit สูงสุด

Carry Flag ร้านค้าที่ Extra Bit แต่ Carry ไม่ได้ระบุโอเวอร์โฟลว์เสมอไป

การตรวจจับน้ำล้น

ล้นเกิดขึ้นเมื่อ −

  • ผลบวกลบสองจำนวนเป็นบวกหรือ

  • ผลลัพธ์ของการบวกเลขลบสองตัวเป็นค่าลบ

ดังนั้นสามารถตรวจพบโอเวอร์โฟลว์ได้โดยตรวจสอบ Most Significant Bit(MSB) ของตัวถูกดำเนินการสองตัวและผลลัพธ์ แต่แทนที่จะใช้ 3-bit Comparator Overflow ก็สามารถตรวจพบการใช้ 2 Bit Comparator ได้เพียงแค่ยืนยันการดำเนินการ Carry-in และ Carry-Out จาก MSB เราพิจารณาการเพิ่ม N-Bit ของ 2's Complement number

ระบบเลขฐานสอง - ล้นในการบวกเลขคณิตใน C / C ++?


Overflow เกิดขึ้นเมื่อ Carry-in ไม่เท่ากับ Carry-out นิพจน์ด้านบนสำหรับโอเวอร์โฟลว์สามารถอภิปรายได้จากการวิเคราะห์ด้านล่าง

ระบบเลขฐานสอง - ล้นในการบวกเลขคณิตใน C / C ++?


ในกรณีของรูปแรก MSB ของตัวเลขสองตัวคือ 0 ซึ่งระบุว่าเป็นค่าบวก ที่นี่หาก Carry-in เป็น 1 เราจะได้ MSB ของผลลัพธ์เป็น 1 แสดงว่าผลลัพธ์เป็นค่าลบ (Overflow) และ Carry-in เป็น 0 การ Carry-in ไม่เท่ากับ Carry-out จึงล้น

ในกรณีของรูปที่สอง MSB ของตัวเลขสองตัวคือ 1 ซึ่งระบุว่าเป็นค่าลบ ที่นี่ถ้า Carry-in เป็น 0 เราจะได้ผลลัพธ์ MSB เป็น 0 แสดงว่าผลลัพธ์เป็นบวก (Overflow) และ Carry-out เป็น 1 Carry-in ไม่เท่ากับ Carry-out จึงล้น

ดังนั้นการพกพาเข้าและดำเนินการที่ MSB ก็เพียงพอแล้วที่จะตรวจพบการล้น

ระบบเลขฐานสอง - ล้นในการบวกเลขคณิตใน C / C ++?


สามารถใช้ XOR Gate ด้านบนเพื่อตรวจจับการล้นได้