Number
System ระบบเลขฐาน
ระบบเลขฐานมีไว้เพื่อช่วยในเรื่องการจัดการระบบดิจิตอลหรือระบบอิเล็กทรอนิกส์ในคอมพิวเตอร์
หรือแทนด้วยรหัสข้อมูลในระบบ BCD , EBCDIC , ASCII ซึ่งระบบเลขฐานที่สำคัญนั้นมีอยู่ด้วยกันดังนี้
1.ระบบเลขฐาน
2 (Binary Number System) เป็นเลขฐานที่ประกอบไปด้วยตัวเลข 2
ตัวคือ 0 กับ 1
ซึ่งเป็นเลขฐานที่คอมพิวเตอร์หรืออุปกรณ์อิเล็กทรอนิกส์เข้าใจง่ายเพราะว่าสถานะทางไฟฟ้ามันบ่งบอกมาเพียง
2 สถานะคือ เปิด กับ ปิด ซึ่งเทียบได้กับ 0 กับ 1
2.
ระบบเลขฐาน 8 (Octal Number System) เป็นเลขฐานที่ประกอบไปด้วยตัวเลข 8
ตัว คือ 0 ,
1 , 2 , 3 , 4 , 5 , 6 และ 7
ซึ่งเป็นเลขฐานที่เพิ่มเนื้อที่ในการเก็บข้อมูลได้มากกว่าระบบเลขฐาน 2
3.
ระบบเลขฐาน 10 (Decimal Number System) เป็นเลขฐานที่ประกอบไปด้วยตัวเลข
10 ตัว คือ 0
, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 และ 9 ซึ่งระบบเลขฐาน 10
นี้เป็นระบบเลขฐานที่คนทุกคนใช้ในชีวิตประจำวันซึ่งใช้มาตลอด
สามารถจพและคำนวณได้ง่ายกว่าเลขฐานอื่นๆ
4.
ระบบเลขฐาน 16 (Hexadecimal Number
System)
เป็นเลขฐานที่ประกอบไปด้วยตัวเลข 10 ตัวและตัวอักษรภาษาอังกฤษอีก 6 ตัว คือ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8
, 9 และตัวอักษรภาษาอังกฤษแทนตัวเลข 10 – 15 ได้แก่ A , B ,
C , D , E , F ซึ่งระบบเลขฐาน16นี้จะเก็บได้มากกว่าระบบเลขฐาน 2 ฐาน
8 ฐาน 10
ตารางแสดงตัวเลขระบบฐานต่างๆ |
Binary
Arithmetic
การดำเนินการทางคณิตศาสตร์ของระบบเลขฐานนั้น
ซึ่งในชีวิตประจำวันนั้นเราจะใช้การดำเนินการทางคณิตศาสตร์ของระบบเลขฐาน 10
ซะส่วนใหญ่ เพราะคนส่วนใหญ่จะเข้าใจง่ายและชินกับตัวเลข 0-9 ไปซะแล้ว แต่ในมุมหนึ่ง
ระบบเลขฐานสองก็สามาระกระทำการทางคณิตศาสตร์ได้เหมือนกัน
ซึ่งเพียงแค่แปลงตัวเลขระบบฐาน 10 ของแต่ละตัวนั้นให้กลายเป็นตัวเลขฐาน 2 ซะ
และสุดท้ายที่สำคัญคือ ผลลัพธ์ที่ได้จะต้องสอดคล้องกับความเป็นจริงเช่นกัน(ระบบเลขฐาน10) เช่น
5 +
3 = 8
(0101)2 + (0011)2 = (1000)2
สรุป Binary
Arithmetic คือ การดำเนินการทางคณิตศาสตร์ของระบบเลขฐาน 2 เช่น บวก ,
ลบ , คูณ , หาร
การบวกเลขฐาน
2
การบวกเลขฐาน 2
นั้นไม่ได้มีอะไรต่างจากการบวกเลขฐาน 10 เพียงแค่ตัวเลขที่ใช้มีเพียงแค่ 0 กับ 1
เท่านั้น
Truth Table
A + B
|
ผลลัพธ์ในระบบเลขฐาน 2
|
ผลลัพธ์ในระบบเลขฐาน 10
|
0 + 0
|
0
|
0
|
0 + 1
|
1
|
1
|
1 + 0
|
1
|
1
|
1 + 1
|
10
|
2
|
1 + 1 + 1
|
11
|
3
|
ตัวอย่าการบวกเลขฐาน
2
11
1 <----- Carry Bits ------> 11
1001101 1001001 1000111
+ 0010010 + 0011001 +
0010110
--------------- --------------- ----------------
1011111 1100010 1011101
Carry
Bits เป็นเหมือนตัวเลขที่ทดไปยังหลักถัดไป
จากตัวอย่างการบวกเลขฐาน
2 ทั้งสามตัวอย่างนี้ สามารถสรุปตัวอย่างได้ดังนี้
ตัวอย่างที่
2 และตัวอย่างที่ 3 เป็นการบวกที่มีการทดตัวเลข เช่น 1+1=10 ในระบบเลขฐานสอง
ซึ่งเราจะเขียนเฉพาตัวเลขที่อยู่ข้างหลังสุดเท่านั้นส่วนตัวเลขข้างหน้าก็จะทดไปให้หลักต่อไป
การลบเลขฐาน
2
Ex
: 7 – 5 = 2 = 7 + (-5)
ซึ่งการลบนั้นสามารถเขียนให้อยู่ในรูปการบวกด้วยค่าลบได้
ในเรื่องการแสดงค่าลบในเลขระบบฐาน
2 นั้น สามารถแสดงได้ในรูป Compliment
หมายเหตุ
:: การ Compliment
เป็นการกำหนดให้บิตซ้ายสุดมีค่าประจำหลักเป็นลบ
Ex
: (1011)2 = (5)10
(1*(-2^3))+(0*(2^2))+(1*(2^1))+(1*(2^0)) = (-5)10
(1*(-8))+(0*4)+(1*2)+(1*1) = (-5)10
(1*(-2^3))+(0*(2^2))+(1*(2^1))+(1*(2^0)) = (-5)10
(1*(-8))+(0*4)+(1*2)+(1*1) = (-5)10
***พึงระวังเรื่อง
Data Range ไว้ด้วย***
เพิ่มเติม
::
MSB ( Most Significant Bit ) หรือบิตนัยสำคัญมากที่สุด คือบิตที่มีค่าประจำตำแหน่งสูงสุด โดยส่วนมากมักจะอยู่ข้างหน้าหรือทางซ้ายมือนั่นเอง
MSB ( Most Significant Bit ) หรือบิตนัยสำคัญมากที่สุด คือบิตที่มีค่าประจำตำแหน่งสูงสุด โดยส่วนมากมักจะอยู่ข้างหน้าหรือทางซ้ายมือนั่นเอง
LSB ( Least Singnificant Bit ) หรือบิตนัยสำคัญน้อยที่สุด
คือบิตที่มีค่าประจำตำแหน่งต่ำสุด โดยส่วนมากมักจะอยู่ข้างหลังหรือทางขวามือนั่นเอง
MSD
( Most Significant Digit ) หรือเลขนับสำคัญสูงสุด คือ
ตัวเลขที่มีค่าประจำตำแหน่งสูงสุด ซึ่งจะอยู่ตำแหน่งขวาสุด
LSD
( Least Significant Digit ) หรือเลขนับสำคัญต่ำสุด คือ
ตัวเลขที่มีค่าประจำตำแหน่งต่ำสุด ซึ่งจะอยู่ตำแหน่งซ้ายสุด
Data
Range คือ ช่วงข้อมูลของหน่วยความจำ
มีไว้เพื่อตรวจสอบว่าข้อมูลที่ได้นั้นอยู่ในช่วงไหนขึ้นอยู่กับชนิดของการ unsigned
ค่า
ตารางแสดงค่า Data Range |
2’s Compliment คืออะไร
เนื่องจากการคำนวณเลขฐานสองนั้นไม่มีการลบจึงทำการ
Compliment แทน
Ex:
00011100 -> 28
จากตัวอย่างนี้ จะทำการ Compliment โดยมีหลักการดังนี้
1.) 1’s Compliment เป็นการสลับเลขฐานสองให้เป็นเลขตรงข้าม
เช่น แปลง 0 เป็น 1 แปลง 1 เป็น 0
00011100
-> 11100011
2.) 2’s Compliment เป็นวิธีต่อเนื่องจาก
1’s Compliment โดยเพิ่มเติมที่บวก 1 เข้าไป
11100011
+ 1
11100100 --> -28
การลบเลขฐาน
2 โดยใช้หลัก 2’s Compliment
1. ทำจำนวนหลักของตัวตั้งและตัวลบให้เท่ากัน โดยการเติม 0
2. หาค่า 2’s Compliment ของตัวลบ
3. นำค่า 2’s Compliment ของตัวลบไปบวกเข้ากับตัวตั้ง
4. เช็คจำนวนหลักของผลลัพธ์ที่ได้
- ถ้ามีจำนวน bit ของผลลัพธ์เกินมาให้ตัดทิ้ง ผลที่ได้คือ ผลลัพธ์ของเลขฐานสางการลบกันมีค่าเป็น บวก
- ถ้าไม่มีจำนวน bit ของผลลัพธ์เกินมาให้ทำ 2’s Compliment ผลลัพธ์อีกครั้ง ผลที่ได้คือ ผลลัพธ์ของเลขฐานสองกับการลบกันมีค่าเป็น ลบ
1. ทำจำนวนหลักของตัวตั้งและตัวลบให้เท่ากัน โดยการเติม 0
2. หาค่า 2’s Compliment ของตัวลบ
3. นำค่า 2’s Compliment ของตัวลบไปบวกเข้ากับตัวตั้ง
4. เช็คจำนวนหลักของผลลัพธ์ที่ได้
- ถ้ามีจำนวน bit ของผลลัพธ์เกินมาให้ตัดทิ้ง ผลที่ได้คือ ผลลัพธ์ของเลขฐานสางการลบกันมีค่าเป็น บวก
- ถ้าไม่มีจำนวน bit ของผลลัพธ์เกินมาให้ทำ 2’s Compliment ผลลัพธ์อีกครั้ง ผลที่ได้คือ ผลลัพธ์ของเลขฐานสองกับการลบกันมีค่าเป็น ลบ
Ex
: 7(10) - 5(10)
มองในรูปการบวกจะได้เป็น 7(10) + (-5(10))
7(10)
แปลงเป็นเลขฐานสองได้ 0111(2)
-5(10)
แปลงเป็นเลขฐานสองได้ 1011(2) -- > แปลงโดยใช้ 2’s Compliment.
0111
+
1011
---------------
10010 ---> หมายเหตุ 1 เกินมา ตัดทิ้ง
Ex
: 18 – 25
18(10)
แปลงเป็นเลขฐานสองได้ 010010(2)
25(10)
แปลงเป็นเลขฐานสองได้ 011001(2) ---> -25(10) โดย 2’s Compliment ได้ 100111(2)
11 <----- Carry Bits
100111
+
010110
---------------
111001
--- > ไม่มี bit
เกินมา จะต้อง 2’s Compliment อีกครั้ง
2’s Compliment จะได้
- 1’s
Compliment = 000110
- 2’s
Compliment = 000110
+ 1 = 000111
Answer 000111(2) = 7(10)
หรืออีกวิธี
ให้ MSB นั้นมีค่าประจำเป็นลบ
จะได้
(1*(-2^5))+(1*(2^4))+(1*(2^3))+(1*(2^0)))
= -7(10)
(1*(-32))+(1*16)+(1*8)+(1)
= -7(10)
***
ควรระวังเรื่อง Binary Overflow ด้วยนะแจ๊ะ
***
Binary Overflow
คือการที่ผลลัพธ์กระทำเกินกว่าที่
Data Range จะรับได้
กรณีศึกษา
17+19 = 36 และ (-17)+(-19)
= -36
Ex
: 17(10) = 10001(2) :: 19(10) = 10011(2) | -17(10)
= 01111(2) -19(10) = 01101(2)
1 11 <------------ Carry Bits ----------> 1 1111
Showing sign bits 010001 |
showing
sign bits 101111
+
010011 | + 101101
--------------- | --------------
100100 | 1011100 ---> 1 เกินมาตัดทิ้ง Answer -32 + 4 = -28 OVER FLOW | Answer 16 + 8 + 4 = 28 OVER FLOW
เราต้องการคำตอบคือ
36 ในเมื่อตอนแรกนั้นเรามี bits เพียง 5 bits เท่านั้น
ซึ่งเมื่อแสดงตัวเลขนั้นโดยยังไม่ต้อง 2’s Compliment นั้น
จำนวนสูงสุดที่จะได้คือ (2^5) = 32 bits นั่นเอง ซึ่ง OVER
FLOW 100% โดยทางแก้อันแรกเลยเพิ่มตัวเลขลงไปอีก 1 bit คือเลข 0 และ 1 (0 แทนเลขบวก,1 แทนเลขลบ)
ซึ่งผลสุดท้ายจะได้ตัวเลขแบบ 6 bits ซึ่งผลที่ได้คือ (2^6)
= 64 bits แต่ถ้าเป็นแบบ 2’s Compliment
ล่ะก็จะแสดงได้เพียงค่า -32 ถึง 31 เท่านั้น ซึ่ง 36 มันเกิน
Data Range ที่จะแสดงได้
คราวนี้เพิ่มตัวเลขเป็น
7 bits ล่ะ จะเป็นยังไง ??
กรณีศึกษา
17+19 = 36 และ (-17)+(-19)
= -36
Ex
: 17(10) = 10001(2) :: 19(10) = 10011(2) | -17(10)
= 01111(2) -19(10) = 01101(2)
1 11 <------------ Carry Bits ----------> 11 1111
Showing sign bits 0010001 |
showing
sign bits 1101111
+ 0010011 | + 1101101
--------------- | ---------------
0100100 | 11011100 ---> 1 เกินมาตัดทิ้ง Answer 0100100(2)
= 32 + 4 = +36 | Answer 1011100(2) = - 64 + 16 + 8 + 4 = -36
คราวนี้
ตัวแปร 7 bits
แบบ 2’s Compliment สามารถแสดงค่าได้ (2^7)
= 128 นั่นคือ -64 ถึง +63 ซึ่ง 36 ไม่เกิน
Data Range ที่จะแสดงได้
Detect การ OVER
FLOW ??
เช็ค
signed bit ของคำตอบเทียบกับ signed bit ของตัวเลขที่นำมาบวกกัน !!
-
ค่าบวก บวกกัน ผลลัพธ์ที่ได้ ต้องเป็นบวก
-
ค่าลบ บวกกัน ผลลัพธ์ที่ได้ ต้องเป็นลบ
ที่เหนือไปกว่านั้นคือ
กรณีค่าบวกกับค่าลบบวกกันจะไม่เกิด OVER FLOW !! อย่างเช่นการนำเลขค่าบวกกับค่าลบในช่วง Data
Range จากตัวแปรที่มีจำนวนบิตเท่ากันมาบวกกัน
ไม่ว่ายังไงผลลัพธ์จะไม่เกิน Data Range ที่แสดงแน่นอน
แล้วจะทำวงจร
Logic gate เพี่อบวกลบเลข
1 bit ได้อย่างไร ??
Truth
Table
A
|
B
|
∑
|
Cout
|
0
|
0
|
0
|
0
|
0
|
1
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
1
|
0
|
1
|
จาก Truth Table นี้ ถ้าเราสนใจแค่ A,B,∑ แค่นี้ล่ะก็ มันก็เหมือนกันเงื่อนไขของ OR Gate ทันทีทุกประการ ดังนั้นเราแค่ต่อ OR Gate ลงไปก็เสร็จ แต่ถ้าสนใจเรื่องของ Cout ด้วยล่ะก็ อันนี้เราก็ต่อ AND Gate เพิ่มเข้าไปด้วยนะ ซึ่ง AND Gate ให้เงื่อนไขได้ตรงกับ Truth Table ข้างต้น ซึ่งการต่อวงจรก็ศึกษาได้จากภาพดังนี้
ซึ่งวงจรนี้เราเรียกมันว่า Half – Adder |
แล้วถ้าต้องการวงจรที่บวกลบมากกว่า
1 bit หล่ะ ??
เราก็ต่อวงจร
Half – adder เพิ่มเข้าไปอีก
1 ชุด โดยที่ขา A ของ OR Gate ตัวที่ 2
นั้นก็คือผลลัพธ์จาก Half – adder ชุดที่ 1 1 ส่วนขา B ของ
OR Gate ตัวที่ 2 นั้นก็ต่อ Cin ไว้ ซึ่งวงจรที่ได้นี้เรียกว่า Full adder
Truth Table
A
|
B
|
Carry-in
|
Sum
|
Carry – out
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
0
|
1
|
0
|
0
|
1
|
1
|
0
|
1
|
1
|
0
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
1
|
1
|
0
|
0
|
1
|
1
|
1
|
1
|
1
|
1
|
วงจรบวกเลขหลายบิต
ก็คือการต่อวงจร
Full adder ต่อเรียงกันตามจำนวนบิต
โดย Cin เริ่มต้นนั้นต้องต่อ GND ไว้เสมือนแทนเลข
0 ลงไป
วงจรลบเลข
เราก็ใช้หลักของ
2’s Compliment ในการทำวงจร
โดยการต่อวงจร Full Adder เหมือนเดิม เพิ่มเติมที่มี XOR
ใช้ในการสลับตัวเลข และคราวนี้ในส่วนของ Cin นั้น
เราก็ต่อไปที่ live switch เพื่อเลื่อนค่า โดยที่ ( 0 = ค่าบวก , 1 = ค่าลบ )
การตรวจจับ
OVER FLOW
วงจรตรวจจับ
OVER FLOW สามารถทำได้อย่างง่ายได้
เพียงแค่ต่อ XOR ระหว่า cin กับ cout
ที่ MSB ( Most Significant Bit )
ไม่มีความคิดเห็น:
แสดงความคิดเห็น