SlideShare a Scribd company logo
1 of 7
เลขฐานสิบ หก (Hexadecimal)
การแทนข้อมูลด้วยเลขฐานสอง เป็นวิธีการที่สอดคล้องกับการทำางานของหน่วยความจำา แต่
เนื่องจากเลขฐานสองมีจำานวนหลักมาก และมีเฉพาะ 0 และ 1 ทำาให้ผู้ใช้พิมพ์ผิดได้ง่าย โดยเฉพาะความ
ผิดชนิดสลับหลัก  หาวิธการที่ง่ายกว่าและชัดเจนกว่า โดยการแทนเลขฐานสอง 4 หลัก ด้วยเลขฐานสิบ
ี
หก 1 หลัก (หรือตัวเลขฐานสิบหก 1 หลักสมนัยกับ 1 nibble) ดังนี้
ฐานสิบ

ฐานสอง

Decimal

ฐานสิบหก
Binary

Hexadecimal

------------------------------------------------------0

0000

0

1

0001

1

log2(1) = 0

2

0

2

0010

2

log2(2) = 1

2

1

3

0011

3

4

0100

4

log2(4) = 2

2

2

5

0101

5

6

0110

6

7

0111

7

8

1000

8

log2(8) = 3

2

9

1001

9

10

1010

A

11

1011

B

12

1100

C

13

1101

D

14

1110

E

15

1111

F

บิตที่มีนัยสำาคัญตำ่าสุด มี 0 และ 1 สลับกัน

3

10 10

โดยมี ACE - เป็นเลขคู่

บิตที่มีนัยสำาคัญตำ่า 0 เป็นเลขคู่ 1 เป็นเลขคี่
การจำาแนกเลขคู่และเลขคี่ของเวลขฐานสองทำาได้ง่าย โดยดูจากบิตที่มีนัยสำาคัญตำ่าสุด ดังนี้
if บิตที่มีนัยสำาคัญตำ่าสุด = 0 then
จำานวนนั้นเป็นเลขคู่
else
จำาวนนั้นเป็นเลขคี่
end
ระบบเลขฐานสิบทำาได้ยากกว่า โดยต้องหารจำานวนที่สนใจด้วย 2 หากหารลงตัว (เศษเป็น 0) เป็นเลขคู่
หากหารไม่ลงตัว (เศษเป็น 1) เป็นเลขคี่ หากกำาหนดให้จำานวนแทนด้วยตัวแปร a จัดโครงสร้างได้ดังนี้
if a mod 2 = 0 then
จำานวนนั้นเป็นเลขคู่
else
จำาวนนั้นเป็นเลขคี่
end

การแทนข้อ มูล ในระบบคอมพิว เตอร์ – แทนด้ว ยเลขฐานสอง
- ข้อ มูล ชนิด ตัว อัก ขระ – 8 บิต/ตัวอักขระ – ข้อมูลชนิด char
- ตัวแปรชนิด char – เก็บตัวอักขระได้ 1 ตัว จากที่เป้นไปได้ทั้งหมด 256 ตัว
- ค่าคงทีอักขระ กำากับด้วยเครืองหมายคำาพูดเดี่ยว เช่น ‘A’
่
่
- สายอักขระ (string) คือ array of char ประกอบด้วยอักขระหลายตัวต่อเนื่องกัน และปิดท้าย
ด้วยอักขระ null (‘0’)
- ค่าคงที่สายอักขระ หรือค่าคงที่ string กำากับด้วยเครืองหมายคำาพูดคู่ เช่น “Hello”
่
- ‘A’ เป็นค่าคงทีอักขระ ส่วน “A” เป็นค่าคงที่ string
่
- ข้อ มูล ชนิด จำา นวน (Number)
- จำานวนนับ หรือจำานวนธรรมชาติ (Natural number) – N = { 0, 1, 2, 3, … }
- ภาษา C กำาหนดให้ใช้คำา unsigned (ไม่มีเครื่องหมาย) ประกอบ เช่น
unsigned int

n;

หมายความว่ากำาหนดให้ n เป็นสมาชิกของเซตชื่อ unsigned int ซึ่งเป็นเซตย่อยของ
จำานวนนับ หรือจำานวนเต็มชนิดไม่มีเครื่องหมาย เขียนในรูปแบบทางคณิตศาสตร์ได้
เป็น n ∈ unsigned int และ unsigned int ⊂ N ดังนั้นตัวแปร n จึงไม่สามารถเก็บ
จำานวนเต็มลบได้
- การแปลงจำานวนธรรมชาติฐานสิบ เป็นจำานวนธรรมชาติฐานสอง ใช้วิธีการแปลง
โดยตรง และเลขฐานสองทุกบิตที่แปลงได้เป็น “ค่า”
- จำานวนเต็ม (Integer) – Z = { … , -2, -1, 0, 1, 2, … }
- ภาษา C กำาหนดให้ใช้คำา signed (มีเครื่องหมาย) ประกอบ เช่น
signed int

a;

หมายความว่ากำาหนดให้ a เป็นสมาชิกของเซตชื่อ signed int ซึ่งเป็นเซตย่อยของ
จำานวนเต็มชนิดมีเครื่องหมาย เขียนในรูปแบบทางคณิตศาสตร์ได้เป็น a ∈ signed int
และ signed int ⊂ Z ดังนั้นตัวแปร a จึงสามารถเก็บจำานวนเต็มได้ทั้งจำานวนบวกและ
จำานวนลบ
- จำานวนเต็มชนิดมีเครื่องหมายมีที่ใช้งานในโปรแกรมมากกว่าจำานวนเต็มชนิดไม่มี
เครืองหมาย เพื่อความสะดวกในการเขียนโปรแกรม ภาษา C จึงกำาหนดให้คำาว่า
่
signed เป็นค่าโดยปริยาย (default value) กล่าวคือ หากผูใช้จะกำาหนดเองต้อง
้
เขียนให้ถูกต้อง หากผู้ใช้ละไว้ระบบจะกำาหนดให้เป็น signed โดยอัตโนมัติ ดังนั้น
การประกาศตัวแปร
signed int

a;

และ
int

a;

จึงมีความหมายเช่นเดียวกัน
- ระบบเลขฐานสองที่ใช้แทนจำานวนเต็มชนิดมีเครื่องหมายฐานสิบ เรียกว่าระบบส่วน
เติมเต็มสอง (two’s complement หรือ 2’s complement)
จำานวนจริง (Real number) – หรือเซตของ R
- สามารถแปลงจำานวนจริงฐานสิบเป็นจำานวนจริงฐานสองได้
- จำานวนจริงฐานสองไม่เหมาะสมในการจัดเก็บในระบบคอมพิวเตอร์ จึงต้องกำาหนด
จำานวนที่ใกล้เคียงเพื่อใช้แทน เรียกว่า Floating point number ซึ่ง IEEE ซึ่งเป็น
องค์กรกำาหนดมาตรฐานด้านวิศวกรรมและคอมพิวเตอร์ มาตรฐานนี้เรียกว่า IEEE
754 ซึ่งกำาหนดให้มี 2 แบบคือ
ตัวเลขชนิด Single precision ขนาด 32 บิต

float ใน

ภาษา C
ตัวเลขชนิด Double precision ขนาด 64 บิต

double ในภาษา C

- เพื่อความสะดวกในการเรียนการสอน กำาหนดให้มี Microfloat ขนาด 8 บิต เพื่อใช้ใน
การสร้างแนวคิด และสามารถคิดในใจได้

การหารจำานวนเต็ม
เซตของจำานวนเต็ม “ปิด” สำาหรับการหาร หมายความว่า ตัวตั้ง (dividend) เป็นจำานวนเต็ม และ
ตัวหาร (divisor) เป็นจำานวนเต็ม  ผลหาร (quotient) เป็นจำานวนเต็ม และเศษที่เหลือจากการหาร
(remainder) เป็นจำานวนเต็ม
การแปลงเลขฐานสิบเป็นฐานอื่น
กำาหนดให้ r (radix) เป็นฐานที่ตองการ
้
กำาหนดให้ d (digit) เป็นเลขฐานสิบทีต้องการแปลงเป็นฐาน r
่
วิธีการ
หารจำานวนเต็มฐานสิบด้วย r เก็บเศษที่เหลือจากการหารไว้ ทำาจนกว่าผลหารจะเป็นศูนย์
เรียงเศษที่เหลือจากการหารจากล่างขึ้นบน
ทำาจนกว่าผลหารจะเป็นศูนย์  โครงสร้างการทำางานแบบทำาซำ้า (loop) มีเงื่อนไขการเลิกทำางานเมื่อ ผล
หาร (quotient) เป็นศูนย์ หรือ q = 0
เลือกใช้โครงสร้าง while  ทำาซำ้าเมื่อเงื่อนไขเป็นจริง จึงต้องปรับเงื่อนไขใหม่เป็น
while ( q != 0 ) {
…
}
- เศษของการหารที่ได้จากการทำางานในแต่ละรอบ เก็บในตัวแปรแถวลำาดับ (array)
- จากตัวอย่างการหาร ผลหาร (quotient) ของการทำางานรอบปัจจุบัน ใช้เป็นตัวตั้ง (dividend) ของรอบ
ต่อไป  ทำาอย่างไรจึงจเปลี่ยนผลหารของรอบปัจจุบันเป้นตัวตั้งของรอบต่อไปได้
การแปลงเลขฐานอื่นเป็นฐานสิบ
กำาหนดให้ r เป็นฐานทีต้องการ
่
กำาหนดให้ d (digit) เป็นเลขในฐาน r ที่ตองการแปลงเป็นฐานสิบ
้
วิธีการ หาผลบวกของเลขทุกหลัก x นำ้าหนักประจำาหลัก
n

∑
i =1

di × r

i

y

- การหาค่าของ x ทำาได้โดยการเรียกใช้ฟังก์ชัน pow() ซึ่งกำาหนดรูปแบบการใช้งานไว้ใน <math.h>
- การหาผลบวกสะสม ทำาได้โดยการใช้โครงสร้างทำาซำ้า เช่น for
sum = 0
for ( int i = 0; i < n ; ++i )
sum += d[i] * pow(r, i);

การแปลงจำานวนเต็มที่มีเครื่องหมาย (signed integer) เป็นเลขฐานสอง
ระบบที่ใช้ – ระบบส่วนเติมเต็มสอง (Two’s complement หรือ 2’s complement)
ข้อมูลทีจำาเป็น – จำานวนบิตของตัวเลขในระบบ 2’s complement
่
ใช้คำานวณหาพิสัยของค่าที่เป็นไปได้
- เลขฐานสิบที่จะนำามาแปลงต้องอยูในพิสัย
่
การคำานวณพิสัยจากจำานวนบิต
กำาหนดให้จำานวนบิต = n
จำานวนเต็มที่ไม่มีเครื่องหมาย (ungned int) ทุกบิตใช้แทนค่า
n

02 -1
จำานวนเต็มที่ไมีเครื่องหมาย (signed int)
1 บิต ใช้แทนเครื่องหมาย – บิตที่มีนัยสำาคัญสูงสุด
0 แทนจำานวนบวก (positive)
1 แทนจำานวนลบ (negative)
n – 1 บิตใช้แทนค่า พิสัยจึงอยู่ระหว่าง
n-1

-2

2

n-1

-1

วิธีการ
จำานวนบวก ใช้วิธการเดียวกับจำานวนเต็มชนิดไม่มีเครื่องหมาย (unsigned integer)
ี
จำำนวนลบ
แปลงค่ำสัมบูรณ์เป็นเลขฐำนสอง จำำนวน n บิต
กลับบืตทุกบิต
บวกด้วย 1
โครงสร้ำง
if จำำนวนบวก then
…
else
…
end
ทำำอย่ำงไรจึงจะรู้ว่ำค่ำในตัวแปร d เป็นจำำนวนบวกหรือจำำนวนลบ
เปรียบเทียบค่ำในตัวแปร d กับ ...
เปรียบเทียบอย่ำงไร ==, !=, >, >=, <, <=

Algorithm: กำรแปลงจำำนวนเต็มชนิดมีเครื่องหมำยฐำนสิบ เป็นเลขฐำนสองในระบบ 2’s complement
Input:

d – จำำนวนเต็มชนิดมีเครื่องหมำยฐำนสิบ ที่มีคำระหว่ำง -128  +127
่

Output:

b – เลขฐำนสองขนำด 8 บิตในระบบ 2’s complement

begin
if d ≥ 0 then
แปลง d เป็นเลขฐำนสอง ขนำด 8 บิต เก็บในตัวแปร b

… … … (1)

else
d=|d|

// ค่ำสัมบูรณ์

แปลง d เป็นเลขฐำนสอง ขนำด 8 บิต เก็บในตัวแปร b

… … … (2)
… … … (3)

กลับบิตทุกบิตใน b (เรียกว่ำ 1’s complement หรือ complement)
บวกค่ำใน b ด้วย 1
end
// ค่ำใน b คือเลขฐำนสองในระบบ 2’s complement
end
จำก Algorithm ข้ำงต้น จะเห็นว่ำบรรทัดทีกำำกับด้วย (1) และ (3) มีกำรทำำงำนเหมือนกัน สำมำรถแยก
่
ออกนอกโครงสร้ำง if ได้ (แบบเดียวกับกำรแยกตัวประกอบ) แต่ต้องนำำคำำสั่งกำรหำค่ำสัมบูรณ์ออกไปด้วย
ซึ่งกำรดำำเนินกำรดังกล่ำวนีไม่มีผลต่อจำำนวนบวก โครงสร้ำงที่จัดใหม่แล้วเป็นดังนี้
้
Algorithm: กำรแปลงจำำนวนเต็มชนิดมีเครื่องหมำยฐำนสิบ เป็นเลขฐำนสองในระบบ 2’s complement
Input:
Output:
begin

d – จำำนวนเต็มชนิดมีเครื่องหมำยฐำนสิบ ที่มีคำระหว่ำง -128  +127
่
b – เลขฐำนสองขนำด 8 บิตในระบบ 2’s complement
negative = false;

// สมมุตให้ d เป็นจำำนวนเต็มทีไม่ใช่จำำนวนลบ
ิ
่

if d < 0 then negative = true end
d=|d|

// ค่ำสัมบูรณ์

แปลง d เป็นเลขฐำนสอง ขนำด 8 บิต เก็บในตัวแปร b
if negative then

// จำำนวนลบ

กลับบิตทุกบิตใน b (เรียกว่ำ 1’s complement หรือ complement)
บวกค่ำใน b ด้วย 1
end
// ค่ำใน b คือเลขฐำนสองในระบบ 2’s complement
end
เมื่อปรับปรุงขั้นตอนวิธีดีแล้ว สำมำรถนำำไปประยุกต์เป็นโปรแกรมด้วยภำษำที่สนใจต่อไปได้
negative = false;

// สมมุตให้ d เป็นจำำนวนเต็มทีไม่ใช่จำำนวนลบ
ิ
่

if d < 0 then negative = true end
d=|d|

// ค่ำสัมบูรณ์

แปลง d เป็นเลขฐำนสอง ขนำด 8 บิต เก็บในตัวแปร b
if negative then

// จำำนวนลบ

กลับบิตทุกบิตใน b (เรียกว่ำ 1’s complement หรือ complement)
บวกค่ำใน b ด้วย 1
end
// ค่ำใน b คือเลขฐำนสองในระบบ 2’s complement
end
เมื่อปรับปรุงขั้นตอนวิธีดีแล้ว สำมำรถนำำไปประยุกต์เป็นโปรแกรมด้วยภำษำที่สนใจต่อไปได้

More Related Content

What's hot

ใบความรู้สมการเชิงเส้นตัวแปรเดียว
ใบความรู้สมการเชิงเส้นตัวแปรเดียวใบความรู้สมการเชิงเส้นตัวแปรเดียว
ใบความรู้สมการเชิงเส้นตัวแปรเดียวkanjana2536
 
โปรแกรม ภาษาซี
โปรแกรม ภาษาซีโปรแกรม ภาษาซี
โปรแกรม ภาษาซีfinverok
 
ข้อมูลดิจิทัลและเลขฐาน
ข้อมูลดิจิทัลและเลขฐานข้อมูลดิจิทัลและเลขฐาน
ข้อมูลดิจิทัลและเลขฐานพัน พัน
 
บทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Javaบทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา JavaItslvle Parin
 
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริงKittinan Noimanee
 
งานนำเสนอ1
งานนำเสนอ1งานนำเสนอ1
งานนำเสนอ1Thank Chiro
 
ฟังก์ชันเอกซ์โพเนนเชียล1
ฟังก์ชันเอกซ์โพเนนเชียล1ฟังก์ชันเอกซ์โพเนนเชียล1
ฟังก์ชันเอกซ์โพเนนเชียล1Chay Nyx
 
Powerpointการเขียนคำสั่งควบคุมแบบมีทางเลือก
Powerpointการเขียนคำสั่งควบคุมแบบมีทางเลือกPowerpointการเขียนคำสั่งควบคุมแบบมีทางเลือก
Powerpointการเขียนคำสั่งควบคุมแบบมีทางเลือกNaphamas
 
เลขยกกำลังและลอการิทึม
เลขยกกำลังและลอการิทึมเลขยกกำลังและลอการิทึม
เลขยกกำลังและลอการิทึมJiraprapa Suwannajak
 

What's hot (20)

7 1 dev c++
7 1 dev c++7 1 dev c++
7 1 dev c++
 
ใบความรู้สมการเชิงเส้นตัวแปรเดียว
ใบความรู้สมการเชิงเส้นตัวแปรเดียวใบความรู้สมการเชิงเส้นตัวแปรเดียว
ใบความรู้สมการเชิงเส้นตัวแปรเดียว
 
Know1 3
Know1 3Know1 3
Know1 3
 
โปรแกรม ภาษาซี
โปรแกรม ภาษาซีโปรแกรม ภาษาซี
โปรแกรม ภาษาซี
 
03 input math
03 input math03 input math
03 input math
 
Numbers
NumbersNumbers
Numbers
 
ข้อมูลดิจิทัลและเลขฐาน
ข้อมูลดิจิทัลและเลขฐานข้อมูลดิจิทัลและเลขฐาน
ข้อมูลดิจิทัลและเลขฐาน
 
C slide
C slideC slide
C slide
 
บทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Javaบทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Java
 
3 booleanalgebra
3 booleanalgebra3 booleanalgebra
3 booleanalgebra
 
Ch02 linear algrebra2
Ch02 linear algrebra2Ch02 linear algrebra2
Ch02 linear algrebra2
 
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
 
12
1212
12
 
งานนำเสนอ1
งานนำเสนอ1งานนำเสนอ1
งานนำเสนอ1
 
Chapter 02 Flowchart
Chapter 02 FlowchartChapter 02 Flowchart
Chapter 02 Flowchart
 
ฟังก์ชันเอกซ์โพเนนเชียล1
ฟังก์ชันเอกซ์โพเนนเชียล1ฟังก์ชันเอกซ์โพเนนเชียล1
ฟังก์ชันเอกซ์โพเนนเชียล1
 
Powerpointการเขียนคำสั่งควบคุมแบบมีทางเลือก
Powerpointการเขียนคำสั่งควบคุมแบบมีทางเลือกPowerpointการเขียนคำสั่งควบคุมแบบมีทางเลือก
Powerpointการเขียนคำสั่งควบคุมแบบมีทางเลือก
 
Basic
BasicBasic
Basic
 
Intro c
Intro cIntro c
Intro c
 
เลขยกกำลังและลอการิทึม
เลขยกกำลังและลอการิทึมเลขยกกำลังและลอการิทึม
เลขยกกำลังและลอการิทึม
 

Similar to เลขฐานสิบหก (Hexadecimal)

โครงสร้างข้อมูล(พัชรา P)
โครงสร้างข้อมูล(พัชรา P)โครงสร้างข้อมูล(พัชรา P)
โครงสร้างข้อมูล(พัชรา P)Patchara Wioon
 
bit byte
bit bytebit byte
bit bytepaween
 
บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1
บทที่  5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1บทที่  5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1
บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1Little Tukta Lita
 
ตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระ ตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระ Areeya Onnom
 
ตัวแปรชุดและตัวแปรอักขระ PPT
ตัวแปรชุดและตัวแปรอักขระ PPTตัวแปรชุดและตัวแปรอักขระ PPT
ตัวแปรชุดและตัวแปรอักขระ PPTAreeya Onnom
 
บทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Javaบทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา JavaItslvle Parin
 
การใช้สูตรในการคำนวณ โปรแกรม Microsoft Excel
การใช้สูตรในการคำนวณ โปรแกรม Microsoft Excelการใช้สูตรในการคำนวณ โปรแกรม Microsoft Excel
การใช้สูตรในการคำนวณ โปรแกรม Microsoft Excelพัน พัน
 
คอมพิวเตอร์กับการประมวลผลข้อมูล
คอมพิวเตอร์กับการประมวลผลข้อมูลคอมพิวเตอร์กับการประมวลผลข้อมูล
คอมพิวเตอร์กับการประมวลผลข้อมูลเกวลิน แก้ววิจิตร
 

Similar to เลขฐานสิบหก (Hexadecimal) (20)

สอนเลขฐาน
สอนเลขฐานสอนเลขฐาน
สอนเลขฐาน
 
บทนำ
บทนำบทนำ
บทนำ
 
โครงสร้างข้อมูล(พัชรา P)
โครงสร้างข้อมูล(พัชรา P)โครงสร้างข้อมูล(พัชรา P)
โครงสร้างข้อมูล(พัชรา P)
 
Integer
IntegerInteger
Integer
 
bit byte
bit bytebit byte
bit byte
 
บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1
บทที่  5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1บทที่  5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1
บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1
 
ตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระ ตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระ
 
เลขฐาน
เลขฐานเลขฐาน
เลขฐาน
 
01
0101
01
 
ตัวแปรชุดและตัวแปรอักขระ PPT
ตัวแปรชุดและตัวแปรอักขระ PPTตัวแปรชุดและตัวแปรอักขระ PPT
ตัวแปรชุดและตัวแปรอักขระ PPT
 
โครงสร้างการเขียนโปรแกรมภาษาไพธอน
โครงสร้างการเขียนโปรแกรมภาษาไพธอนโครงสร้างการเขียนโปรแกรมภาษาไพธอน
โครงสร้างการเขียนโปรแกรมภาษาไพธอน
 
บทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Javaบทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Java
 
การใช้สูตรในการคำนวณ โปรแกรม Microsoft Excel
การใช้สูตรในการคำนวณ โปรแกรม Microsoft Excelการใช้สูตรในการคำนวณ โปรแกรม Microsoft Excel
การใช้สูตรในการคำนวณ โปรแกรม Microsoft Excel
 
เลขฐาน
เลขฐานเลขฐาน
เลขฐาน
 
C lab5 2
C lab5 2C lab5 2
C lab5 2
 
งานทำ Blog บทที่ 2
งานทำ Blog บทที่ 2งานทำ Blog บทที่ 2
งานทำ Blog บทที่ 2
 
คอมพิวเตอร์กับการประมวลผลข้อมูล
คอมพิวเตอร์กับการประมวลผลข้อมูลคอมพิวเตอร์กับการประมวลผลข้อมูล
คอมพิวเตอร์กับการประมวลผลข้อมูล
 
Introduction toc
Introduction tocIntroduction toc
Introduction toc
 
งานทำBlog บทที่ 4
งานทำBlog บทที่ 4งานทำBlog บทที่ 4
งานทำBlog บทที่ 4
 
ลอการิทึม
ลอการิทึมลอการิทึม
ลอการิทึม
 

เลขฐานสิบหก (Hexadecimal)

  • 1. เลขฐานสิบ หก (Hexadecimal) การแทนข้อมูลด้วยเลขฐานสอง เป็นวิธีการที่สอดคล้องกับการทำางานของหน่วยความจำา แต่ เนื่องจากเลขฐานสองมีจำานวนหลักมาก และมีเฉพาะ 0 และ 1 ทำาให้ผู้ใช้พิมพ์ผิดได้ง่าย โดยเฉพาะความ ผิดชนิดสลับหลัก  หาวิธการที่ง่ายกว่าและชัดเจนกว่า โดยการแทนเลขฐานสอง 4 หลัก ด้วยเลขฐานสิบ ี หก 1 หลัก (หรือตัวเลขฐานสิบหก 1 หลักสมนัยกับ 1 nibble) ดังนี้ ฐานสิบ ฐานสอง Decimal ฐานสิบหก Binary Hexadecimal ------------------------------------------------------0 0000 0 1 0001 1 log2(1) = 0 2 0 2 0010 2 log2(2) = 1 2 1 3 0011 3 4 0100 4 log2(4) = 2 2 2 5 0101 5 6 0110 6 7 0111 7 8 1000 8 log2(8) = 3 2 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F บิตที่มีนัยสำาคัญตำ่าสุด มี 0 และ 1 สลับกัน 3 10 10 โดยมี ACE - เป็นเลขคู่ บิตที่มีนัยสำาคัญตำ่า 0 เป็นเลขคู่ 1 เป็นเลขคี่ การจำาแนกเลขคู่และเลขคี่ของเวลขฐานสองทำาได้ง่าย โดยดูจากบิตที่มีนัยสำาคัญตำ่าสุด ดังนี้ if บิตที่มีนัยสำาคัญตำ่าสุด = 0 then จำานวนนั้นเป็นเลขคู่ else จำาวนนั้นเป็นเลขคี่ end ระบบเลขฐานสิบทำาได้ยากกว่า โดยต้องหารจำานวนที่สนใจด้วย 2 หากหารลงตัว (เศษเป็น 0) เป็นเลขคู่ หากหารไม่ลงตัว (เศษเป็น 1) เป็นเลขคี่ หากกำาหนดให้จำานวนแทนด้วยตัวแปร a จัดโครงสร้างได้ดังนี้ if a mod 2 = 0 then
  • 2. จำานวนนั้นเป็นเลขคู่ else จำาวนนั้นเป็นเลขคี่ end การแทนข้อ มูล ในระบบคอมพิว เตอร์ – แทนด้ว ยเลขฐานสอง - ข้อ มูล ชนิด ตัว อัก ขระ – 8 บิต/ตัวอักขระ – ข้อมูลชนิด char - ตัวแปรชนิด char – เก็บตัวอักขระได้ 1 ตัว จากที่เป้นไปได้ทั้งหมด 256 ตัว - ค่าคงทีอักขระ กำากับด้วยเครืองหมายคำาพูดเดี่ยว เช่น ‘A’ ่ ่ - สายอักขระ (string) คือ array of char ประกอบด้วยอักขระหลายตัวต่อเนื่องกัน และปิดท้าย ด้วยอักขระ null (‘0’) - ค่าคงที่สายอักขระ หรือค่าคงที่ string กำากับด้วยเครืองหมายคำาพูดคู่ เช่น “Hello” ่ - ‘A’ เป็นค่าคงทีอักขระ ส่วน “A” เป็นค่าคงที่ string ่ - ข้อ มูล ชนิด จำา นวน (Number) - จำานวนนับ หรือจำานวนธรรมชาติ (Natural number) – N = { 0, 1, 2, 3, … } - ภาษา C กำาหนดให้ใช้คำา unsigned (ไม่มีเครื่องหมาย) ประกอบ เช่น unsigned int n; หมายความว่ากำาหนดให้ n เป็นสมาชิกของเซตชื่อ unsigned int ซึ่งเป็นเซตย่อยของ จำานวนนับ หรือจำานวนเต็มชนิดไม่มีเครื่องหมาย เขียนในรูปแบบทางคณิตศาสตร์ได้ เป็น n ∈ unsigned int และ unsigned int ⊂ N ดังนั้นตัวแปร n จึงไม่สามารถเก็บ จำานวนเต็มลบได้ - การแปลงจำานวนธรรมชาติฐานสิบ เป็นจำานวนธรรมชาติฐานสอง ใช้วิธีการแปลง โดยตรง และเลขฐานสองทุกบิตที่แปลงได้เป็น “ค่า” - จำานวนเต็ม (Integer) – Z = { … , -2, -1, 0, 1, 2, … } - ภาษา C กำาหนดให้ใช้คำา signed (มีเครื่องหมาย) ประกอบ เช่น signed int a; หมายความว่ากำาหนดให้ a เป็นสมาชิกของเซตชื่อ signed int ซึ่งเป็นเซตย่อยของ จำานวนเต็มชนิดมีเครื่องหมาย เขียนในรูปแบบทางคณิตศาสตร์ได้เป็น a ∈ signed int และ signed int ⊂ Z ดังนั้นตัวแปร a จึงสามารถเก็บจำานวนเต็มได้ทั้งจำานวนบวกและ จำานวนลบ - จำานวนเต็มชนิดมีเครื่องหมายมีที่ใช้งานในโปรแกรมมากกว่าจำานวนเต็มชนิดไม่มี เครืองหมาย เพื่อความสะดวกในการเขียนโปรแกรม ภาษา C จึงกำาหนดให้คำาว่า ่ signed เป็นค่าโดยปริยาย (default value) กล่าวคือ หากผูใช้จะกำาหนดเองต้อง ้
  • 3. เขียนให้ถูกต้อง หากผู้ใช้ละไว้ระบบจะกำาหนดให้เป็น signed โดยอัตโนมัติ ดังนั้น การประกาศตัวแปร signed int a; และ int a; จึงมีความหมายเช่นเดียวกัน - ระบบเลขฐานสองที่ใช้แทนจำานวนเต็มชนิดมีเครื่องหมายฐานสิบ เรียกว่าระบบส่วน เติมเต็มสอง (two’s complement หรือ 2’s complement) จำานวนจริง (Real number) – หรือเซตของ R - สามารถแปลงจำานวนจริงฐานสิบเป็นจำานวนจริงฐานสองได้ - จำานวนจริงฐานสองไม่เหมาะสมในการจัดเก็บในระบบคอมพิวเตอร์ จึงต้องกำาหนด จำานวนที่ใกล้เคียงเพื่อใช้แทน เรียกว่า Floating point number ซึ่ง IEEE ซึ่งเป็น องค์กรกำาหนดมาตรฐานด้านวิศวกรรมและคอมพิวเตอร์ มาตรฐานนี้เรียกว่า IEEE 754 ซึ่งกำาหนดให้มี 2 แบบคือ ตัวเลขชนิด Single precision ขนาด 32 บิต float ใน ภาษา C ตัวเลขชนิด Double precision ขนาด 64 บิต double ในภาษา C - เพื่อความสะดวกในการเรียนการสอน กำาหนดให้มี Microfloat ขนาด 8 บิต เพื่อใช้ใน การสร้างแนวคิด และสามารถคิดในใจได้ การหารจำานวนเต็ม เซตของจำานวนเต็ม “ปิด” สำาหรับการหาร หมายความว่า ตัวตั้ง (dividend) เป็นจำานวนเต็ม และ ตัวหาร (divisor) เป็นจำานวนเต็ม  ผลหาร (quotient) เป็นจำานวนเต็ม และเศษที่เหลือจากการหาร (remainder) เป็นจำานวนเต็ม การแปลงเลขฐานสิบเป็นฐานอื่น กำาหนดให้ r (radix) เป็นฐานที่ตองการ ้ กำาหนดให้ d (digit) เป็นเลขฐานสิบทีต้องการแปลงเป็นฐาน r ่ วิธีการ หารจำานวนเต็มฐานสิบด้วย r เก็บเศษที่เหลือจากการหารไว้ ทำาจนกว่าผลหารจะเป็นศูนย์ เรียงเศษที่เหลือจากการหารจากล่างขึ้นบน ทำาจนกว่าผลหารจะเป็นศูนย์  โครงสร้างการทำางานแบบทำาซำ้า (loop) มีเงื่อนไขการเลิกทำางานเมื่อ ผล หาร (quotient) เป็นศูนย์ หรือ q = 0 เลือกใช้โครงสร้าง while  ทำาซำ้าเมื่อเงื่อนไขเป็นจริง จึงต้องปรับเงื่อนไขใหม่เป็น while ( q != 0 ) {
  • 4. … } - เศษของการหารที่ได้จากการทำางานในแต่ละรอบ เก็บในตัวแปรแถวลำาดับ (array) - จากตัวอย่างการหาร ผลหาร (quotient) ของการทำางานรอบปัจจุบัน ใช้เป็นตัวตั้ง (dividend) ของรอบ ต่อไป  ทำาอย่างไรจึงจเปลี่ยนผลหารของรอบปัจจุบันเป้นตัวตั้งของรอบต่อไปได้ การแปลงเลขฐานอื่นเป็นฐานสิบ กำาหนดให้ r เป็นฐานทีต้องการ ่ กำาหนดให้ d (digit) เป็นเลขในฐาน r ที่ตองการแปลงเป็นฐานสิบ ้ วิธีการ หาผลบวกของเลขทุกหลัก x นำ้าหนักประจำาหลัก n ∑ i =1 di × r i y - การหาค่าของ x ทำาได้โดยการเรียกใช้ฟังก์ชัน pow() ซึ่งกำาหนดรูปแบบการใช้งานไว้ใน <math.h> - การหาผลบวกสะสม ทำาได้โดยการใช้โครงสร้างทำาซำ้า เช่น for sum = 0 for ( int i = 0; i < n ; ++i ) sum += d[i] * pow(r, i); การแปลงจำานวนเต็มที่มีเครื่องหมาย (signed integer) เป็นเลขฐานสอง ระบบที่ใช้ – ระบบส่วนเติมเต็มสอง (Two’s complement หรือ 2’s complement) ข้อมูลทีจำาเป็น – จำานวนบิตของตัวเลขในระบบ 2’s complement ่ ใช้คำานวณหาพิสัยของค่าที่เป็นไปได้ - เลขฐานสิบที่จะนำามาแปลงต้องอยูในพิสัย ่ การคำานวณพิสัยจากจำานวนบิต กำาหนดให้จำานวนบิต = n จำานวนเต็มที่ไม่มีเครื่องหมาย (ungned int) ทุกบิตใช้แทนค่า n 02 -1 จำานวนเต็มที่ไมีเครื่องหมาย (signed int) 1 บิต ใช้แทนเครื่องหมาย – บิตที่มีนัยสำาคัญสูงสุด 0 แทนจำานวนบวก (positive) 1 แทนจำานวนลบ (negative) n – 1 บิตใช้แทนค่า พิสัยจึงอยู่ระหว่าง n-1 -2 2 n-1 -1 วิธีการ จำานวนบวก ใช้วิธการเดียวกับจำานวนเต็มชนิดไม่มีเครื่องหมาย (unsigned integer) ี
  • 5. จำำนวนลบ แปลงค่ำสัมบูรณ์เป็นเลขฐำนสอง จำำนวน n บิต กลับบืตทุกบิต บวกด้วย 1 โครงสร้ำง if จำำนวนบวก then … else … end ทำำอย่ำงไรจึงจะรู้ว่ำค่ำในตัวแปร d เป็นจำำนวนบวกหรือจำำนวนลบ เปรียบเทียบค่ำในตัวแปร d กับ ... เปรียบเทียบอย่ำงไร ==, !=, >, >=, <, <= Algorithm: กำรแปลงจำำนวนเต็มชนิดมีเครื่องหมำยฐำนสิบ เป็นเลขฐำนสองในระบบ 2’s complement Input: d – จำำนวนเต็มชนิดมีเครื่องหมำยฐำนสิบ ที่มีคำระหว่ำง -128  +127 ่ Output: b – เลขฐำนสองขนำด 8 บิตในระบบ 2’s complement begin if d ≥ 0 then แปลง d เป็นเลขฐำนสอง ขนำด 8 บิต เก็บในตัวแปร b … … … (1) else d=|d| // ค่ำสัมบูรณ์ แปลง d เป็นเลขฐำนสอง ขนำด 8 บิต เก็บในตัวแปร b … … … (2) … … … (3) กลับบิตทุกบิตใน b (เรียกว่ำ 1’s complement หรือ complement) บวกค่ำใน b ด้วย 1 end // ค่ำใน b คือเลขฐำนสองในระบบ 2’s complement end จำก Algorithm ข้ำงต้น จะเห็นว่ำบรรทัดทีกำำกับด้วย (1) และ (3) มีกำรทำำงำนเหมือนกัน สำมำรถแยก ่ ออกนอกโครงสร้ำง if ได้ (แบบเดียวกับกำรแยกตัวประกอบ) แต่ต้องนำำคำำสั่งกำรหำค่ำสัมบูรณ์ออกไปด้วย ซึ่งกำรดำำเนินกำรดังกล่ำวนีไม่มีผลต่อจำำนวนบวก โครงสร้ำงที่จัดใหม่แล้วเป็นดังนี้ ้ Algorithm: กำรแปลงจำำนวนเต็มชนิดมีเครื่องหมำยฐำนสิบ เป็นเลขฐำนสองในระบบ 2’s complement Input: Output: begin d – จำำนวนเต็มชนิดมีเครื่องหมำยฐำนสิบ ที่มีคำระหว่ำง -128  +127 ่ b – เลขฐำนสองขนำด 8 บิตในระบบ 2’s complement
  • 6. negative = false; // สมมุตให้ d เป็นจำำนวนเต็มทีไม่ใช่จำำนวนลบ ิ ่ if d < 0 then negative = true end d=|d| // ค่ำสัมบูรณ์ แปลง d เป็นเลขฐำนสอง ขนำด 8 บิต เก็บในตัวแปร b if negative then // จำำนวนลบ กลับบิตทุกบิตใน b (เรียกว่ำ 1’s complement หรือ complement) บวกค่ำใน b ด้วย 1 end // ค่ำใน b คือเลขฐำนสองในระบบ 2’s complement end เมื่อปรับปรุงขั้นตอนวิธีดีแล้ว สำมำรถนำำไปประยุกต์เป็นโปรแกรมด้วยภำษำที่สนใจต่อไปได้
  • 7. negative = false; // สมมุตให้ d เป็นจำำนวนเต็มทีไม่ใช่จำำนวนลบ ิ ่ if d < 0 then negative = true end d=|d| // ค่ำสัมบูรณ์ แปลง d เป็นเลขฐำนสอง ขนำด 8 บิต เก็บในตัวแปร b if negative then // จำำนวนลบ กลับบิตทุกบิตใน b (เรียกว่ำ 1’s complement หรือ complement) บวกค่ำใน b ด้วย 1 end // ค่ำใน b คือเลขฐำนสองในระบบ 2’s complement end เมื่อปรับปรุงขั้นตอนวิธีดีแล้ว สำมำรถนำำไปประยุกต์เป็นโปรแกรมด้วยภำษำที่สนใจต่อไปได้