อภิปรายการหารจำนวนเต็มที่ไม่ได้ลงนามโดยใช้อัลกอริธึมการหาร อัลกอริธึมการแบ่งบางส่วนถูกนำไปใช้บนกระดาษ และอัลกอริธึมอื่นๆ ถูกนำไปใช้กับวงจรดิจิทัล อัลกอริธึมการหารมีสองประเภท:อัลกอริธึมการหารแบบช้าและอัลกอริธึมการหารแบบเร็ว อัลกอริทึมการแบ่งช้ารวมถึงการคืนค่า การกู้คืนที่ไม่มีประสิทธิภาพ SRT และอัลกอริทึมที่ไม่กู้คืน
ในบทช่วยสอนนี้ เราจะพูดถึงอัลกอริทึมการกู้คืน โดยสมมติว่า 0 <ตัวหาร <เงินปันผล
แนวทางในการหาแนวทางแก้ไข
ในที่นี้ เราจะใช้ register Q เพื่อเก็บผลหาร ลงทะเบียน A เพื่อเก็บส่วนที่เหลือ และ M เพื่อเก็บตัวหาร ค่าเริ่มต้นของ A จะถูกเก็บไว้ที่ 0 และค่าของมันจะกลับคืนมา ซึ่งเป็นสาเหตุที่วิธีนี้เป็นการคืนค่าการหาร
-
เริ่มต้นการลงทะเบียนด้วยค่า
-
Q =เงินปันผล
-
A =0,
-
M =ตัวหาร
-
N =จำนวนบิตของเงินปันผล
-
-
กะซ้าย AQ หมายถึงการลงทะเบียน A และ Q เป็นหน่วยเดียว
-
ลบ A ด้วย M และเก็บไว้ใน A
-
ตรวจสอบบิตที่สำคัญที่สุดของ A:
-
หากเป็น 0 ให้ตั้งค่าบิตที่มีนัยสำคัญน้อยที่สุดเป็น 1
-
มิฉะนั้น ตั้งค่าบิตที่มีนัยสำคัญน้อยที่สุดเป็น 0
-
-
คืนค่าของ A และลดค่าของตัวนับ N
-
ถ้า N =0 ให้ทำลายลูป มิฉะนั้น ให้ไปที่ขั้นตอนที่ 2
-
ผลหารถูกเก็บไว้ในรีจิสเตอร์ Q.
ผังงาน
ตัวอย่าง
รหัส C++ สำหรับแนวทางข้างต้น
#include <iostream> using namespace std; int main(){ // initializing all the variables with Dividend = 9, Divisor = 2. int Q = 8,q=1,M=3; short N = 4; int A = Q; M <<= N; // loop for division by bit operation. for(int i=N-1; i>=0; i--) { A = (A << 1)- M; // checking MSB of A. if(A < 0) { q &= ~(1 << i); // set i-th bit to 0 A = A + M; } else { q |= 1 << i; // set i-th bit to 1 } } cout << "Quotient: "<< q; return 0; }
ผลลัพธ์
Quotient: 2
บทสรุป
ในบทช่วยสอนนี้ เราได้พูดถึงอัลกอริทึมการหารการกู้คืนสำหรับจำนวนเต็มที่ไม่ได้ลงนาม เราได้พูดคุยถึงแนวทางง่ายๆ ในการแก้ปัญหานี้โดยใช้ผังงานและการใช้การดำเนินการบิต เรายังพูดถึงโปรแกรม C++ สำหรับปัญหานี้ ซึ่งเราสามารถทำได้ด้วยภาษาโปรแกรม เช่น C, Java, Python เป็นต้น เราหวังว่าคุณจะพบว่าบทช่วยสอนนี้มีประโยชน์