1) "การบวก" เลขฐานสอง
อย่างที่หลายๆคนรู้กัน เลขฐาน 2 มันก็มีแค่ตัวเลข 0 กับ 1 ใช่ไหมครับ แล้วเลขฐานสองที่แปลมาจากเลขฐานสิบทั้งหลายนี่ยาวเป็นพรืดด อย่างเช่น 01101 จะมีค่าเท่ากับ 13 ใช่ไหมครับ ถ้าเอามา + กับ 01010 (ในฐานสิบมันคือเลข 10) ผลที่ได้มันจะต้องเป็นเลขฐานสองที่มีค่าฐานสิบเท่ากับ 23 พอดีเป๊ะๆ #อึ้งชิมิล่ะะะ (ในที่นี้เป็นเลข 5 บิตนะ...ทำไมหนะเหรอ มันมีเหตุผล*) วิธีการบวกก็ไม่ยากครับ
0 + 0 เท่ากับ 0
1 + 0 หรือ 0 + 1 เท่ากับ 1
1 + 1 จะเท่ากับ 10 (ไม่ใช่เลขสิบแต่อย่างใด มันคือหนึ่งศูนย์นะ ใส่ศูนย์ทดหนึ่งไปบวกตัวหน้า)
**แล้วถ้ากรณีมันเป็น 1 + 1 แต่ดันมีเศษมา + อีก 1 หละ จะได้ว่า 1 + 1 + 1 เท่ากับ 11 (หนึ่ง ทด หนึ่ง) นั่นเอง มาสองกันเถอะๆ
1
0 1 1 0 1 +
0 1 0 1 0
1 0 1 1 1
10111 มันเท่ากับ 23 ในฐานสิบเป๊ะๆ #ไม่ธรรมดาา
พอได้การบวกแล้วการลบก็ไม่ยากแล้วหละครับ..
2) "การลบ" เลขฐานสอง
ในระบบเลขฐานสองเราจะถือการลบเป็น "บวกด้วยเลขค่าลบ" เช่น 13+(-10) นั่นเอง โดยเราจะทำให้ 10 ในเลขฐานสองเป็น -10 ด้วยวิธีที่ง้ายง่ายแต่ก็ยาก #เอ๊ะยังไง มาดูกันครับ
เราเรียกวิธีการนี้ว่า Compliment ครับ (ในความเป็นจริงมันคงจะยากกว่านี้ อันนี้เป็นเพียงวิธีที่ผมเข้าใจนะครับ) มันคือการเอาเลขฐานสองที่อยากให้เป็นลบของเรามาผ่านกระบวนการ 2 ขั้นตอน ได้แก่
1's Compliment = กลับเลข 1 เป็น 0 และ 0 เป็น 1 ให้หมด เช่น เลข 10 ของเรา 01010 เป็น 10101
2's Compliment = จับ + 1 เพิ่มเข้าไปจากตัวที่กลับเลขแล้ว จะได้เป็น 10110 << คือ -10 ของเราแล้วครับ
แล้วเราก็เอา -10 (10110) ของเราเนี่ยไป + กับ 13 ในระบบการบวกฐานสอง ก็จะได้
01101+10110 = 00011 โดยมีทด 1 อยู่หน้าสุด ในที่นี้เป็นเลข 5 บิต ตัวที่เกินจาก 5 หลักไปจะเรียกว่า extra bit ซึ่งเราจะทอดทิ้งมันไป #ฮ่าๆหัวเราะอย่างสะใจเหมือนคะแนนที่กำลังจะหายไปของบล็อคเกอร์T_T ซึ่ง 00011 คือ 3 ในฐานสิบนั่นเอง #ปรบมือออ
*ทำไมต้อง 5 บิต...นั่นไงง ก็เพราะว่า จำนวนตัวเลขที่สามารถปรากฏกายออกมาได้ใน 4 บิตนั้นมันมีแค่ (2กำลัง4) 16 จำนวนซึ่งไม่ถึง 23 ของเราในค่าบวก ถ้าเราบวกๆกันไปใช่ไหมครับ เลขตัวหน้าจะโดนตัดทิ้งในหลักที่ 5 ทำให้ค่าที่ได้มัน "OVERFLOW" #เขาเรียกมาแบบนี้จริงๆเชื่อผมสิ หรือก็คือบวกมาแล้วค่าที่ได้ผิดพลาดนั่นเอง **ในที่นี้ยังไม่ได้อธิบายถึง ค่า unsigned อย่างการบวกในข้อ 1 เลย (หรือผมเข้าใจผิดขอให้จุดนี้เป็น ปัญหา ที่อาจจะเข้าใจไม่ท่องแท้ครับ)
3) การ OVERFLOW ของการบวกลบเลข
การจะตรวจสอบวงจรของเราว่ามีการบวกลบแล้ว overflow หรือไม่นั้น
3.1) ผลลัพธ์ที่เกิดจาก จำนวนบวก มาบวกกันต้องมีค่าเป็น บวก
3.2) ผลลัพธ์ที่เกิดจาก จำนวนลบ มาบวกกันต้องมีค่าเป็น ลบ
3.3) ในกรณีที่ จำนวนบวก บวกกับ จำนวนลบ จะไม่มีทาง overflow
4) การต่อ LOGIC GATE : Half Adder (บวกลบบิตเดียวได้)
เทียบกับการเรียนรู้ที่ 1 การต่อวงจรจะเป็นแบบที่ใช้ XOR Gate และ AND Gate ให้ได้ผลรวม 1 บิต และเลขที่ทดออกทาง Cout
ดูจาภาพซ้ายบนคือ input 0+0 ขวาบน 0+1 ซ้ายล่าง 1+0 ขวาล่าง 1+1 จะได้ output ไฟดวงขวาเป็นผลรวม ดวงซ้ายเป็นเลขทด (Cout) นั่นเอง จะพบว่ายังมีปัญหาอยู่ที่ เราคำนวนตัวทดต่อไม่ได้ #ทำไงหละทีนี้ จึงเกิดเป็นข้อถัดไปนั่นเอง
4) การต่อ LOGIC GATE : Half Adder (บวกลบบิตเดียวได้)
เทียบกับการเรียนรู้ที่ 1 การต่อวงจรจะเป็นแบบที่ใช้ XOR Gate และ AND Gate ให้ได้ผลรวม 1 บิต และเลขที่ทดออกทาง Cout
รูปที่ 1 ต่อ Logic Gate แบบ Half Adder |
ดูจาภาพซ้ายบนคือ input 0+0 ขวาบน 0+1 ซ้ายล่าง 1+0 ขวาล่าง 1+1 จะได้ output ไฟดวงขวาเป็นผลรวม ดวงซ้ายเป็นเลขทด (Cout) นั่นเอง จะพบว่ายังมีปัญหาอยู่ที่ เราคำนวนตัวทดต่อไม่ได้ #ทำไงหละทีนี้ จึงเกิดเป็นข้อถัดไปนั่นเอง
5) การต่อ LOGIC GATE : Full Adder (แบบ 1 บิตที่สามารถคำนวนเลขทดได้)
จะเป็นการเอา Half Adder 2 ตัวมาต่อกันโดย Cout จาก Half ที่ 1 ไปเป็น Cin เทียบกับค่า input อีกตัว (การคำนวนเลขทดมาบวกกับบิตต่อไปนั่นเอง) ผลที่ได้ออกมาจะเป็น ผลรวมของแต่ละบิต แล้ว Cout สุดท้ายซึ่งเป็นตัวทดไว้ไปคำนวนกับ Full Adder อีกตัวนั่นเอง
รูปที่ 2 แบบการต่อแบบ Full Adder |
รูปที่ 3 Full Adder 1 Bit |
5) การต่อ LOGIC GATE : Full Adder (มากกว่า 1 บิต)
เป็นการเอา Full Adder มาต่อกันตามจำนวนบิตที่ได้ ในกรณีนี้สามารถทำ Compliment หรือ Detect Overflow ได้ด้วยการต่อ Gate เพิ่มตามตำแหน่งต่างๆ ตามภาพ
รูปที่ 4 การต่อ Full Adder แบบ 4 บิตที่สามารถทำ Compliment ผ่าน XOR Gate 4 ตัวด้านบน กับ Detect Overflow ด้วย SOR Gate ตัวซ้ายล่าง |
รูปที่ 5 การเรียนรู้ที่ 3 Full Adder 2 บิต |
0 ความคิดเห็น:
แสดงความคิดเห็น