610 likes | 1.25k Views
ดิจิตอลลอจิกและโครงสร้างคอมพิวเตอร์ บทที่ 2. รองศาสตราจารย์ธีรวัฒน์ ประกอบผล. ระบบตัวเลขและรหัส. ระบบตัวเลข. ระบบเลขฐานสองและเลขฐานสิบ การแปลงเลขฐานระหว่างฐานสองกับฐานสิบ ระบบเลขฐานแปด การแปลงเลขฐานระหว่างฐานสองกับฐานแปด การแปลงเลขฐานระหว่างฐานสิบกับแปด ระบบเลขฐานสิบหก
E N D
ดิจิตอลลอจิกและโครงสร้างคอมพิวเตอร์บทที่ 2 • รองศาสตราจารย์ธีรวัฒน์ ประกอบผล
ระบบตัวเลข • ระบบเลขฐานสองและเลขฐานสิบ การแปลงเลขฐานระหว่างฐานสองกับฐานสิบ • ระบบเลขฐานแปด การแปลงเลขฐานระหว่างฐานสองกับฐานแปด การแปลงเลขฐานระหว่างฐานสิบกับแปด • ระบบเลขฐานสิบหก การแปลงเลขฐานระหว่างฐานสองกับฐานสิบหก การแปลงเลขฐานระหว่างฐานสิบกับฐานสิบหก
ระบบตัวเลข เครื่องคอมพิวเตอร์มีการประมวลผลด้วยระบบดิจิตอล ในการติดต่อกับระบบคอมพิวเตอร์จะต้องใช้ชุดคำสั่งต่างๆ และชุดคำสั่งที่คอมพิวเตอร์รู้จักจะเป็นในรูปแบบเลขฐานสอง โครงสร้างพื้นฐานที่ใช้ แทนค่าข้อมูล และคำสั่งในหน่วยความจำของระบบคอมพิวเตอร์ คือ บิต,ไบต์ สิ่งที่ระบบคอมพิวเตอร์เข้าใจ คือ การตีความจากค่าของบิตต่างๆ ซึ่งจะถูกมองเป็นเลขฐานสอง
ระบบเลขฐานสองและเลขฐานสิบระบบเลขฐานสองและเลขฐานสิบ ในระบบดิจิตอลมีระดับสัญญาณทางไฟฟ้าสองระดับ การแทนค่าระดับสัญญาณทางไฟฟ้าจะใช้เลขฐานสอง โดยเลขฐานสองเรียกว่า บิต ถ้าจะใช้ระบบตัวเลขแทนค่าสัญญาณดิจิตอลหลายๆบิต จะใช้เลขฐานสิบหกแทน เราสามารถเปรียบเทียบเลขฐานสองและเลขฐานสิบได้ โดยนำค่าแต่ละบิตคูณกับค่าน้ำหนักของแต่ละบิตแล้วนำมารวมกัน โดยค่าน้ำหนักของแต่ละบิตหาได้จากค่ายกกำลังของตำแหน่งบิตนั้น
ตัวอย่างการแปลงเลขฐานสองเป็นเลขฐานสิบ11012 = (1 x 23 ) + (1 x 22 ) + (0 x 21 ) + (1 x 20 ) = 8 + 4 + 0 + 1 = 13 00112 = (1 x 21 ) + (1 x 20 ) = 3
การแปลงเลขฐานสิบเป็นเลขฐานสองการแปลงเลขฐานสิบเป็นเลขฐานสอง มี 2 วีธี คือ วิธีการลบและวิธีการหาร วิธีการลบ ทำได้โดยนำค่ากำลังของสองค่าสูงสุดที่สามารถลบค่าเลขฐานสิบได้ไปลบ จากนั้นแทนค่าบิตนี้เป็นค่า “1” และเป็นบิตสูงสุด เศษที่ได้จากการลบให้นำค่าสองยกกำลังค่าที่ต่ำลงมาไปลบ ถ้าลบให้ได้เป็น “1” และลบต่อไปเรื่อยๆ ถ้าลบไม่ได้ให้เป็น “0”และนำค่าสองยกกำลังต่ำลงมาไปลบแทน
ตัวอย่างการแปลงเลข 4910 เป็นเลขฐานสองทำได้ดังนี้ 49- 32 25 กำลังสูงสุดที่ลบจาก 49 ได้ 17 - 16 24 กำลังสูงสุดที่ลบจาก 16 ได้ 1- 1 20 กำลังสูงสุดที่ลบจาก 1 ได้ 0 ลบต่อไม่ได้ จากนั้นเขียนค่า “1” ตำแหน่งกำลังของสองที่สามารถลบได้ ถ้าลบไม่ได้ให้เขียน “0” จะได้49 = 1100012
วิธีการหาร วิธีนี้จะนำฐานสิบมาหารด้วยสองไปเรื่อยๆ และนำเศษที่เหลือมาเขียนเป็นเลขฐานสอง โดยค่าแรกจะเป็นบิตต่ำ และนำผลหารที่ได้มาหารด้วยสองต่อไป ตัวอย่าง การแปลงเลข 4910 เป็นเลขฐานสองทำได้ดังนี้ 49 / 2 = 24 เหลือเศษ 1 (บิตต่ำสุด) 24 / 2 = 12 เหลือเศษ 0 12 / 2 = 6 เหลือเศษ 0 6 / 2 = 3 เหลือเศษ 0 3 / 2 = 1 เหลือเศษ 1 1 / 2 = 0 เหลือเศษ 1 (บิตสูงสุด) นำเศษที่ได้มาเขียนเป็นเลขฐานสองจะได้เป็น 1 1 0 0 0 1
ระบบเลขฐานแปด ระบบเลขฐานแปดนี้จะใช้สัญลักษณ์แทน 8 ตัวคือ 0,1,2,3,4,5,6 และ 7 การแปลงเลขฐานแปดเป็นเลขฐานสิบทำได้โดยนำค่าแต่ละหลักคูณกับค่าน้ำหนักของแต่ละหลัก
ตัวอย่างการแปลงเลขฐานแปดเป็นเลขฐานสิบตัวอย่างการแปลงเลขฐานแปดเป็นเลขฐานสิบ 3728 = (3 x 82 ) + (7 x 81 ) + (2 x 80 ) = (3 x 64 ) + (7 x 8 ) + (2 x 1) = 250 24.68 = (2 x 81) + (4 x 80 ) + (6 x 8 -1) = 20.75
การแปลงเลขฐานสิบเป็นเลขฐานแปด ทำโดยนำแปดไปหาร เศษที่ได้จากการหารค่าแรกจะเป็นหลักต่ำสุด 266 / 8 = 33 + เศษ 2 33 / 8 = 4 + เศษ 1 4 / 8 = 0 + เศษ 4 ดังนั้น 26610 = 4128
การแปลงเลขฐานแปดเป็นเลขฐานสองสามารถทำได้โดยเขียนเลขฐานสองที่แทนเลขแปดในแต่ละหลัก จากนั้นนำข้อมูลมาต่อกัน
ถ้าหากต้องการแปลงเลข 4728 เป็นเลขฐานสองสามารถทำได้ดังนี้ 4 7 2 100 111 010 ดังนั้นเลข 4728 สามารถเขียนเป็นเลขฐานสองได้เป็น 100111010 ส่วนการแปลงเลขฐานสองเป็นเลขฐานแปดทำได้โดยให้จัดกลุ่มครั้งละ 3 บิต เริ่มจากบิตต่ำสุด แล้วเขียนเป็นเลขฐานแปดที่สอดคล้องกัน ถ้าหากไม่สามารถจัดกลุ่มให้เติมศูนย์ไปที่บิตสูงสุด ตัวอย่างเช่น ถ้าแปลง 11010110 เป็นเลขฐานแปดสามารถทำได้ดังนี้ เติม 0 011 010 110 3 2 6
ระบบเลขฐานสิบหก ระบบเลขฐานสิบหกนี้จะใช้สัญลักษณ์แทน 16 ตัวคือ,1,2,3,4,5,6,7,8,9,A,B,C,D,Eและ F เลขฐานสิบหกหนึ่งหลักสามารถแทนเลขฐานสองได้ 4 หลัก
การแปลงเลขฐานสิบหกเป็นเลขฐานสองการแปลงเลขฐานสิบหกเป็นเลขฐานสอง 9F2H = 9 F 2 = 1001 1111 0010 = 100111110010 ส่วนการแปลงเลขฐานสองเป็นเลขฐานแปดทำได้โดยให้จัดกลุ่มครั้งละ 4 บิต และแทนเลขฐานสองแต่ละกลุ่มด้วยเลขฐานสิบหก 11010101 = 1101 0101 = D 5 = D5H สามารถทำได้โดยแทนเลขฐานสิบหกแต่ละหลักด้วยเลขฐานสอง 4 บิต และนำมาเรียงต่อกัน
การแปลงเลขฐานสิบหกเป็นเลขฐานสิบการแปลงเลขฐานสิบหกเป็นเลขฐานสิบ สามารถทำได้โดยน้ำหนักของเลขฐานสิบหกแต่ละหลักจะเป็น 160,161,162 …… ไปคูณกับค่าแต่ละหลัก แล้วนำมาบวกกัน
ตัวอย่าง แปลงเลขฐานสิบหกเป็นเลขฐานสิบ วิธีทำ นำค่าน้ำหนักของแต่ละหลักมาคูณแล้วนำมาบวกกัน A0916 = 10 x 162 + 0 x 161 + 9 x 160 = 2560 + 9 = 2569
การแปลงเลขฐานสิบเป็นเลขฐานสิบหกทำได้โดยการหารด้วย 16 ไปเรื่อยๆ ตัวอย่าง แปลงเลขฐานสิบเป็นเลขฐานสิบหก วิธีทำ 418 / 16 = 26 เศษ 2 26 / 16 = 1 เศษ 10 1 / 16 = 0 เศษ 1 41810 = 1 A 216
ระบบเลข BCD ( Binary-Coded-Decimal System )
ระบบเลข BCD • คอมพิวเตอร์รุ่นแรก ๆ เป็นคอมพิวเตอร์ที่ประมวลผลแบบ 4 บิต • ต่อมามีการพัฒนาเป็นคอมพิวเตอร์แบบ 8 บิต เพราะว่าเวิร์ดข้อมูลขนาด 8 บิต สามารถแทนเลข BCD ได้สองหลัก • ตัวเลข BCD บางครั้งเรียกว่า รหัส 8421 • เป็นระบบเลขที่ใช้เลขฐานสองจำนวนสี่บิตแทนเลขฐานสิบหนึ่งหลัก
การแปลงระหว่างเลขฐานสิบกับเลข BCD • สามารถทำได้โดยการจัดกลุ่มของเลขฐานสองจำนวนสี่บิต เช่น 8 แทนเลขฐานสองจำนวนสี่บิต คือ 1000
การแปลงเลขฐานสิบเป็นเลข BCD ตัวอย่าง จงแปลงเลข 49610 เป็นเลข BCD 4 9 6 0100 1001 0110 จะได้ 49610= 0100 1001 0110BCD ANS แทนค่าด้วยเลขฐานสอง
การแปลงเลข BCD เป็นเลขฐานสิบ ตัวอย่าง จงแปลงเลข 0111 0101 1000BCDเป็นเลขฐานสิบ 0111 0101 1000 7 5 8 จะได้ว่า 0111 0101 1000BCD = 75810 ANS
ตัวอย่างที่ไม่สามารถแปลงค่าได้ตัวอย่างที่ไม่สามารถแปลงค่าได้ ตัวอย่าง จงแปลงเลข 0110 0100 1011BCDเป็นเลขฐานสิบ 0110 0100 1011 6 4 * ไม่สามารถแปลงได้ เพราะเลขฐานสองสี่บิตที่เป็นเลข BCD ต้องมีค่าไม่เกิน 9
การบวกเลข BCD • บวกเลข BCD สองจำนวนเหมือนกับการบวกเลขฐานสองที่ได้ศึกษามา • ถ้าหากผลบวกจำนวน 4 บิต มีค่าเท่ากับหรือน้อยกว่า 9 ตัวเลขนั้นคือเลข BCD • ถ้าหากผลบวกจำนวน 4 บิต มีค่ามากกว่า 9 หรือมีตัวทดจากบิตที่ 4 ให้นำค่า 6 คือ 0110 เข้าไปบวกด้วย ผลลัพธ์ที่ได้จะเป็นเลข BCD
ตัวอย่างการบวกเลข BCD จงบวกเลข BCD 10000110 + 00010011 = ? 1000 0110 86 + 0001 0011+ 13 1001 1001 99 ANS
การบวกเลข BCD ในกรณีที่มีค่ามากกว่า 9 จงบวกเลข BCD 1001 + 0100 = ? 1001 9 + 0100 + 4 1101 13 + 0110 ไม่ใช่เลข BCD เพราะมากกว่า 9 0001 0011 บวกด้วย 6 1 3 ANS
การบวกเลข BCD ในกรณีมีตัวทดจากบิตที่ 4 จงบวกเลข BCD 1001 + 1001 = ? 1001 9 +1001+ 9 1 0010 มีตัวทดจากบิตที่ 4 18 + 0110บวกด้วย 6 0001 1000 1 8 ANS
การบวกเลข BCD ในกรณีทั้งสองกลุ่มมากกว่า 9 จงบวกเลข BCD 01100111 + 01010011 = ? 0110 0111 67 + 0101 0011+ 53 1011 1010 ทั้งสองกลุ่มมากกว่า 9 120 + 0110 0110 0001 0010 0000 1 2 0 ANS
รหัสคอมพิวเตอร์ คอมพิวเตอร์เป็นอุปกรณ์อิเล็กทรอนิกส์ที่รู้จักระดับสัญญาณไฟฟ้าว่าเป็น ลอจิก “0” หรือลอจิก “1” เท่านั้น การที่จะให้คอมพิวเตอร์รู้จักตัวเลขหรือตัวอักขระต่างๆ จะต้องมีการเข้ารหัส ตัวอักขระเหล่านั้นให้เป็นข้อมูลที่คอมพิวเตอร์รู้จักเสียก่อน อย่างเช่นถ้าจะให้คอมพิวเตอร์เข้าใจว่าตัวอักขระตัวหนึ่งเป็นตัว “A” จะต้องให้ข้อมูล ที่มีค่าดิจิตอลเป็น 1000001 การทำแบบนี้เรียกว่า การเข้ารหัส รหัสคอมพิวเตอร์มีได้หลายรหัส ที่นิยมใช้กันคือรหัส ASCII ย่อมาจาก American Standard Code for Information Interchangeโดยใช้รหัสเลขฐานสอง จำนวน 7 บิต แทนตัวอักขระ 128 ตัว โดยรวมรหัสควบคุมต่าง ๆ ด้วย รหัสแอสกี่นี้ ในคอมพิวเตอร์จะใช้ในการรับข้อมูลจากแป้นพิมพ์ แสดงตัวอักษรทางจอภาพ และส่งข้อมูลออกทางเครื่องพิมพ์
รหัส ASCII รหัสแอสกี่มีจำนวน 128 ตัว จะเห็นว่าจะใช้เลขฐานสองจำนวน 8 บิตแทน แต่บิตที่ 8 จะมีค่าเป็น “0” เพราะรหัสแอสกี่จะใช้ข้อมูลเพียง 7 บิต การใช้รหัสแอสกี่ในการสื่อสารข้อมูลระหว่างคอมพิวเตอร์ จะมีบิตพิเศษเพิ่มอีกหนึ่งบิต เรียกว่า บิตพาริตี้ ( Parity ) โดยบิตนี้จะเป็นบิตตรวจสอบความผิดพลาดของข้อมูล
การสื่อสารข้อมูลด้วยรหัส ASCII แปลงข้อมูล ขนาน เป็น อนุกรม แปลงข้อมูล อนุกรม เป็น ขนาน สร้างบิต พาริตี้ ตรวจสอบ บิตพาริตี้
รหัสเกรย์ ( GRAY CODE ) รหัสเกรย์เป็นรหัสคอมพิวเตอร์อีกชนิดหนึ่ง แต่เป็นรหัสที่ไม่มีค่าน้ำหนัก ไม่เหมาะสมสำหรับทำการคำนวณ แต่จะมีประโยชน์ในระบบที่ต้องใช้อุปกรณ์อินพุตเอาต์พุต และการเปลี่ยนแปลงระหว่างระบบเลขอนาลอกกับระบบเลขดิจิตอลบางประเภท การเปลี่ยนแปลงของรหัสเกรย์แต่ละค่า จะต่างจากจำนวนก่อนหน้าอยู่ 1 บิตเสมอ ทำให้เกิดความผิดพลาดในการส่งรหัสได้ยากเมื่อเทียบกับระบบเลขฐานสอง
ตารางเปรียบเทียบรหัสเกรย์กับเลขฐานสิบและเลขฐานสองตารางเปรียบเทียบรหัสเกรย์กับเลขฐานสิบและเลขฐานสอง
รหัสเกิน 3 ( Excess-3 Code )รหัสเกิน 3 เป็นรหัสที่ไม่มีน้ำหนัก รหัสนี้ประกอบด้วยกลุ่มเลขฐานสองจำนวน4 บิต โดยเกิดจากการนำเลข BCD มาบวกด้วย 3
ระบบตัวเลขแบบคิดเครื่องหมายระบบตัวเลขแบบคิดเครื่องหมาย • บิตสูงสุด คือ บิตเครื่องหมาย • ถ้าบิตสูงสุดเป็น 0 แปลว่าเป็นบวก • ถ้าบิตสูงสุดเป็น 1 แปลว่าเป็นลบ
จำนวนเลขที่มีเครื่องหมายเครื่องหมายขนาด ( Signed-Magnitude,SM ) • บิตแรกเป็นบิตเครื่องหมาย • ตัวเลขฐานสองที่ตามมาจะเป็นค่าขนาด ( Magnitude ) หรือ ค่าสัมบูรณ์ ( Absolute ) • ถ้าบิตเครื่องหมายเป็น 0 แทนตัวเลขบวก • ถ้าบิตเครื่องหมายเป็น 1 แทนตัวเลขลบ
ระบบเลข One’ Complement • บิตแรกเป็นบิตเครื่องหมาย • ถ้าบิตเครื่องหมายเป็น 0 คือ เป็นเลขบวก ให้เขียนค่าตัวเลขตามหลัง • ถ้าบิตเครื่องหมายเป็น 1 คือ เป็นเลขลบให้เขียนค่าตามหลังเป็นค่าตรงข้าม
ตัวอย่างการแปลงเลข SM และ One’ Complement จงแปลง -28 เป็นแบบ SM และ One’ Complement แบบ SM -28 = 111002 เติมบิตเครื่องหมายเป็น 1 ดังนั้น -28 = 1111002 แบบ One’ Complement 111002 กลับค่าเป็น 000112 ดังนั้น -28 = 1000112
จงแปลง 85 เป็นแบบ SM และ One’ Complemeny แบบ SM 85 = 10101012 เติมบิตเครื่องหมายเป็น 0 ดังนั้น 85 = 010101012 แบบ One’ Complement 85 = 010101012 ดังนั้น 85 = 010101012
จงแปลง -1.25 เป็นแบบ SM และ One’ Complement แบบ SM 1.25 แปลงเป็นเลขฐานสองได้ 1.012 ดังนั้น -1.25 = 11.012 แบบ One’ Complement 1.012กลับค่าเป็น 0.102 ดังนั้น -1.25 = 10.102
ระบบเลข Two’ Complement • บิตแรกเป็นบิตเครื่องหมาย • ถ้าเป็นบวกไม่ต้องกลับค่าบิตขนาด • ถ้าเป็นลบกลับค่าบิตที่ตามมาทั้งหมดแล้วบวกด้วย 1
ตัวอย่างการแปลงเลขแบบ Two’ Complement จงแปลง -28 เป็นแบบ Two’ Complement จากตัวอย่างที่แล้วของ One’ Complement 28 = 111002 กลับค่าของ 111002 ได้ 000112 นำมาบวกด้วย 1 00011 + 1 00100 ดังนั้น -28 = 1001002
จงแปลง 85 เป็นแบบ Two’ Complement เนื่องจาก 85 = 10101012 ซึ่งมีค่าเป็นบวก ดังนั้นจึงไม่ต้องเปลี่ยน เพียงใส่บิตเครื่องหมายที่เป็นบวกคือ 0 ดังนั้น 85 = 010101012
จงแปลง -1.25 เป็นแบบ Two’ Complement 1.25 = 1.012 เป็นลบ กลับค่า 1.012 ได้ 0.102 บวกด้วย 1 0.10 + 1 0.11 ดังนั้น -1.25 = 10.112
คณิตศาสตร์ของเลข Two’ Complement ระบบเลข Two’ Complement สามารถใช้แทนเลขลบได้ ในการลบเลขคอมพิวเตอร์ จะใช้วิธีการบวกแทนวิธีการลบ แต่จะเป็นการบวกด้วยเลขลบแทน โดยเลขลบนั้นจะใช้เลขฐานสองแบบ Two’ Complement เช่น การลบค่า 14 ออกจาก 20 สามารถมองเป็น +14 + (-20) +14 = 0000 1110 (0EH) + -20= 0001 0100 กลับค่าเป็น 1110 1011 + 1 = +1110 1100 ( ECH) -6 1111 1010 = FAH จะเห็นว่าผลจากการบวกเป็น FAH โดยบิตสูงสุดเป็น 1 หมายความว่าเป็นเลขลบ ดังนั้นเราต้องแปลงค่า FAH นี้เป็นเลขฐานสิบ จะได้ 1111 1010 กลับค่าเป็น 0000 0101 + 1 = 0000 0110 = -6 แต่หากการบวกนี้เป็นการบวกแบบไม่คิดเครื่องหมายผลลัพธ์ FAH จะมีค่าเป็น 250
การประกาศตัวแปรของคอมพิวเตอร์การประกาศตัวแปรของคอมพิวเตอร์ • ตัวแปรแบบ char เก็บข้อมูลได้ในช่วงใด ? • ตัวแปรแบบ integer เก็บข้อมูลได้ในช่วงใด ? • ตัวแปรแบบ unsigned integer เก็บข้อมูลได้ในช่วงใด ? • ตัวแปรแบบ long เก็บข้อมูลได้ในช่วงใด ?