บทความยอดนิยม

วันพฤหัสบดีที่ 8 ธันวาคม พ.ศ. 2554

การคำนวณเลขฐาน

การคำนวณทางเลขฐานในระบบคอมพิวเตอร์ไม่ว่าจะรันโปรแกรมใดๆโดย ส่วนใหญ่หลักพื้นฐานจะต้องมีการคำนวณทางคณิตศาตร์เข้ามาเกี่ยวข้อง ดังนั้นพื้นฐานทางคณิตศาตร์ในระบบดิจิตอลมีความจำเป็นมาก ไม่ว่าจะเป็นการ บวก ลบ คูณ หาร เลขฐานที่เกี่ยวข้องที่จำเป็นได้แก่ เลขไบนารี่ หรือเลขฐานสอง และเลขฐานสิบหก เป็นต้น
ก่อนอื่น ต้องเข้าใจหลักเกณฑ์ในการ บวก ลบ คูณ หาร เลขไบนารี่เสียก่อน ดังนี้


การบวกเลขฐานสองมีเกณฑ์เพียง 4 กรณีดังนี้
1. 0+0=0
2. 0+1=1
3. 1+0=1
4. 1+1=0  
( ทดหลักต่อไป 1) , 1+1 = 2 ผลลัพธ์ที่ได้เกินเลขพื้นฐานของเลขฐานสอง จะต้องลบด้วย2 จึงต้องใส่ค่าเป็น 0 แล้วทด 1
การลบเลขฐานสอง
มีเกณฑ์เพียง 4 กรณีดังนี้
1. 0-0=0
2. 1-0=1
3. 1-1=0
4. 0-1=1
(ยืม จากบิตที่มีน้ำหนักมากกว่ามา 1) ,การมีหลักเกณฑ์ คือ ตัวที่ให้ยืมมีค่าลดไป 1 ค่า ,และค่าที่ยืมมา 1นั้น(ในเลขฐานสองมีค่าเท่ากับ2)ให้นำไปบวกกับตัวที่ยืมแล้วทำการลบได้เลย
การคูณเลขฐานสอง
มีเกณฑ์เพียง 4 กรณีดังนี้
1. 0x0=0
2. 0x1=0
3. 1x0=0
4. 1x1=1
การหารเลขฐานสอง
มีวิธีการเหมือนกับเลขฐานสิบ คือ
 0/1=0
 1/1=1

หลัก การข้างต้นเป็นแค่พื้นฐานขั้นแรก แต่ยังมีการคำนวณเลขที่เป็นเลขติดค่าลบ หรือเป็นเลขที่มีเครื่องหมายเข้ามาเกี่ยวข้องนั่นเอง เลขประเภทนี้จะต้องมีวิธีการแตกต่างออกไปจากข้างต้น โดยจะต้องมีบิตแสดงเครื่องหมายเพิ่มขึ้นมา เราเรียกว่า sign bit แต่วิธีดังกล่าวจะทำให้เกิดความยุ่งยากทางฮาร์ดแวร์จึงต้องมีวิธีการหนึ่ง เข้ามาช่วย เรียกว่าการคอมพลิเมนต์เลขไบนารี่
การคอมพลีเมนต์เลขไบนารี่มีสองวิธี คือ
1. 1's complement
2. 2's complement
รูปแบบ 1's complement 1's complement ของเลขฐานสอง คือการกลับสถานะของตัวเลขในแต่ละบิตนั่นเอง คือ กลับ 0 เป็น 1, และ กลับ 1 เป็น 0
รูปแบบ 2's complement  2's complement ของเลขฐานสอง คือ ผลบวกของ  1's complement กับเลข 1 นั่นเอง


ระบบเครื่องหมาย -2's complementระบบเครื่องหมายลบ 2's comlement ที่นำมาใช้แทตัวเลขในเลขฐานสองมีหลักการดังนี้
-ถ้าเป็นเลขบวก ให้ใส่ 0 ที่บิตเครื่องหมาย และบิตข้อมูลจะเป็นเลขฐานสอง
-ถ้าเป็นเลขลบ ให้ใส่ 1 ที่บิตเครื่องหมาย และบิตข้อมูลจะเป็นเลข 2's complement ของเลขฐานสอง

ตัวอย่าง เช่น 7(10) = 0111(2) , -7(10) = 1001(2) เป็นต้น

การบวกในระบบ -2's complementสามารถแบ่งเป็น4กรณี ดังนี้
1. เป็นเลขบวกทั้งสองจำนวน เช่น 5+2
  จะได้เป็น        (+5)  +  (+2)             
                    (0 101) + (0 010)  = 0 111 หรือ 7 ในเลขฐานสิบ
2.เป็นเลขบวกกับเลขลบที่น้อยกว่า เช่น  4+(-2)
  จะได้เป็น       (+4)  +  (-2)       
                   (0 100) + (1 110)** = 0 010  หรือ 2 ในเลขฐานสิบ
       ** หมายถึง ค่าเลขที่เป็นลบต้องทำการ -2's complement ก่อน แล้วจึงนำมาใช้ได้
3.เป็นเลขบวกกับเลขลบที่มากกว่า เช่น 3 + (-4)
  จะได้เป็น       (+3)  +  (-4)       
                   (0 011) + (1 100) = (1 111)**  หรือ (-1) ในเลขฐานสิบ
       ** หมายถึง ค่าเลขที่เป็นลบต้องทำการ -2's complement ก่อน แล้วจึงนำมาใช้ได้
4.เป็นลบทั้งสองจำนวน เช่น (-3)+(-4)
จะได้เป็น       (-3)  +  (-4)       
                   (1 101) + (1 100) = (1 001)**  หรือ (-7) ในเลขฐานสิบ
       ** หมายถึง ค่าเลขที่เป็นลบต้องทำการ -2's complement ก่อน แล้วจึงนำมาใช้ได้
การลบในระบบ -2's complementในการลบนี้มีเทคนิคที่ทำให้ง่ายคือ เปลี่ยนเลขตัวลบให้อยู่ในแบบ  -2's complement ก่อน แล้วนำมาบวกกันจะได้ผลลัพธ์ออกมา
สามารถแบ่งเป็น4กรณี ดังนี้
1. เป็นเลขบวกทั้งสองจำนวน เช่น 5+2
  จะได้เป็น        (+5) - (+2) 
   แทนค่า      (0 101) - (0 010)   : เปลี่ยนตัวลบเป็น  -2's complement
     จะได้       (0 101)+ (1 110)  = 0 011 หรือ 3 ในเลขฐานสิบ
2.ตัวตั้งเป็นบวก ตัวลบเป็นลบ เช่น 5-(-2)
  จะได้เป็น        (+5)  -  (-2)             
  แทนค่า       (0 101) - (1 110)    : เปลี่ยนตัวลบเป็น  -2's complement
    จะได้         (0 101) + (0 010)  = 0 111 หรือ 7 ในเลขฐานสิบ
3.ตัวตั้งเป็นลบ ตัวลบเป็นบวก เช่น (-5)-(2)
   จะได้เป็น        (-5)  -  (2)           
    แทนค่า      (1 011) - (0 010)    : เปลี่ยนตัวลบเป็น  -2's complement
   จะได้        (1 011) + (1 110)  = 1 001 หรือ -7 ในเลขฐานสิบ
4.เป็นลบทั้งสองจำนวน เช่น (-5)-(-2)
  จะได้เป็น        (-5)  -  (-2)           
    แทนค่า       (1 011) - (1 110)    : เปลี่ยนตัวลบเป็น  -2's complement
    จะได้         (1 011) + (0 010)  = 1 101 หรือ -3 ในเลขฐานสิบ

การบวกและลบเลขฐานสิบหก มีรายละเอียดดังนี้
การบวกเลขฐานสิบหก ทำ การบวกได้เหมือนเลขฐานสิบได้เลย หากค่าเกินเลขพื้นฐานของฐานนั้นให้นำค่าพื้นฐานมาลบออก ใส่ค่านั้นลงไปแล้วทดไป 1(ค่าพื้นฐานในเลขฐานสิบหกคือ 16 นั่นเอง)
ตัวอย่าง    A2D + 819
วิธีทำ           A2D  +
                   819
คำตอบ      1246
การลบเลขฐานสิบหก มีหลักการลบดังนี้
 หากตัวตั้งมากกว่า หรือเท่ากับตัวลบให้ลบตามปกติ หากตัวตั้งน้อยกว่าตัวลบให้ยืมหลักถัดไป ค่าที่ยืมมามีค่าเท่ากับค่าเลขฐาน(ในีที่นี้เท่ากับ 16) ตัวที่ถูกยืมค่าจะลดลง 1 ค่า เมื่อยืมมาแล้วให้รวมค่ากับตัวยืมแล้วนำไปลบตามปกติ
ตัวอย่าง    A2D - 8A9
วิธีทำ           A2D  -
                  8A9
คำตอบ      184