เรื่องของ "
ชนิดข้อมูล - Data Type" ล้วนมีความสำคัญเป็นอย่างมากในการออกแบบ หรือ พัฒนาโปรแกรมขึ้นมา
อย่าง
เวลาที่เราจะสร้างฐานข้อมูลขึ้นมาสักตารางก็ต้องไปเกี่ยวข้องกับชนิดข้อมูล
แล้ว พอไปเขียนโปรแกรมก็ต้องมีการประกาศตัวแปรชนิดต่างๆอีกนั่นไงล่ะครับ
... พี่น้อง
ชนิดของข้อมูลเหล่านี้อาจมีชื่อเรียกที่แตกต่างกันไปในแต่ละตัวแปลภาษา
แต่ทั้งนี้ทั้งนั้นมันก็ล้วนแล้วแต่ก่อกำเนิดมาจากรากเหง้า หรือ
วิธีการคิดเช่นเดียวกัน ในปัจจุบันนี้ ผมคิด และ ยังเชื่อว่า
มีพี่น้องอีกหลายต่อหลายคนที่ยังไม่เคยรู้เรื่องนี้มาก่อน ...
แต่ผมไม่ขอสรุปให้ฟังหรอกน่ะว่า "
เราจะเข้าใจมันไปทำไม ???" เอาเป็นว่า ...
ขอให้พี่น้องนำไปคิดเอาเองล่ะกันครับผม ... ว่าจะนำสิ่งที่รู้ตรงนี้ไปใช้ประโยชน์จากมันอย่างไรได้บ้าง เหอๆๆๆๆ
การหาค่าต่ำสุด และ สูงสุดของเลขจำนวนเต็มขนาด 1 และ 2 ไบต์ แบบไม่คิดเครื่องหมาย
พี่น้อง ... สังเกตเห็นค่าหน่วยความจำ RAM มั้ยครับว่าทำไมมันถึงได้เพิ่มเป็นเท่าตัวตลอด ... เหอๆๆๆๆ
ก็เพราะมันมาจากเลข 2 ยกกำลังเลขจำนวนเต็มใดๆ ที่เรียงต่อๆกันดังภาพด้านบนนี่แหละครับ ... พี่น้อง
เลขจำนวนเต็มขนาด 2 Byte (16 บิต) หรือ Integer (แบบคิดเครื่องหมาย) จะมีค่าระหว่าง -32,768 ถึง +32,767
มันหามาได้ก็เพราะด้วยวิธีการเฉกเช่นนี้ล่ะครับ ... พี่น้อง
ค่าต่ำสุด และ สูงสุด ของเลขจำนวนเต็มขนาด 1 ไบต์ แบบคิดเครื่องหมาย
ตัวอย่างการหาไบนารี่เลข -128
เวลาบวกเลขฐาน 2 ก็อย่างงน่ะครับ ... 1 + 1 = 0 ทด 1 เด้อพี่น้อง
ตัวอย่างการหาไบนารี่เลข -28
ตัวอย่างการหาไบนารี่เลข -129
บทพิสูจน์จากโปรแกรม
โปรแกรมภาษาปาสคาล ทดสอบชนิดของข้อมูล
จาก
No-3 เราพบว่าเมื่อตัวแปร Bytes (ชนิด BYTE แบบไม่คิดเครื่องหมาย)
มีค่าเท่ากับ 255 + 1 หรือ 256
แต่ผลที่ได้กลับวนรอบกลับมาที่จุดเริ่มต้นใหม่ ... นั่นคือ 0
นี่คือบทพิสูจน์ ... ผลลัพธ์ที่ได้มันควรจะได้เป็น 256 (ฐาน 10) หรือ
1 0 0 0 0 0 0 0 0 (ฐาน 2) แต่พี่น้องพึงสังเกตว่าเลขจำนวนเต็มขนาด 1 ไบต์ มันสามารถเก็บค่าได้เพียง 8 บิต (บิต 7 - บิต 0 = 8 บิต)
ดัง
นั้นมันจึงเก็บได้เพียงเลข 0 ทั้งหมด 8 ตัว ส่วนตัวทด คือ 1 มันคือบิต 8
(หรือตัวที่ 9) ไม่รู้ว่าเราจะเอามันไปยัดใส่ไว้ตรงไหนน่ะซิ ผลลัพธ์ที่ได้มันก็เลยให้คำตอบมาเป็น 0 อย่างที่เห็นและเป็นอยู่
... แต่หากพี่น้องต้องการจะคิดตัวทดด้วย ก็จะต้องเปลี่ยนตัวแปรชนิด BYTE
ให้กลายเป็นเลขจำนวนเต็มแบบ Integer ขนาด 2 ไบต์แทนไงล่ะคร้าบ ...
หรือใช้โปรแกรมภาษา C++
ผลลัพธ์ที่ได้เหมือนกันล่ะครับ ... พี่น้อง
เมื่อลองนำมาทดสอบกับ MS Visual Basic 6.0
เกิด Run Time Error แบบกระจุ๊กกระจิ๊ก ...
ซึ่ง
นอกจากจะเรื่องของชนิดข้อมูลแล้ว
มันยังมีอีกหลายๆอย่างที่พี่น้องต้องเจอะกับ Bug
อันเนื่องมาจากสาเหตุเล็กๆน้อยๆที่มักจะมองข้ามไป
การแก้ไข Bug ... แต่การพัฒนาโปรแกรมจริงๆกว่าจะหา Bug เจอ มันไม่ได้ง่ายดายเช่นนี้น่ะครับ ... พี่น้อง
Posted in ชนิดข้อมูล
ระบบเลขฐานแปด