Sunday, May 26, 2013


เรื่องของ "ชนิดข้อมูล - 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++
หรือใช้โปรแกรมภาษา C++

คำตอบของภาษา C++
ผลลัพธ์ที่ได้เหมือนกันล่ะครับ ... พี่น้อง


เมื่อลองนำมาทดสอบกับ MS Visual Basic 6.0
เกิด Run Time Error แบบกระจุ๊กกระจิ๊ก ...
ซึ่ง นอกจากจะเรื่องของชนิดข้อมูลแล้ว มันยังมีอีกหลายๆอย่างที่พี่น้องต้องเจอะกับ Bug อันเนื่องมาจากสาเหตุเล็กๆน้อยๆที่มักจะมองข้ามไป


การแก้ไข Bug ... แต่การพัฒนาโปรแกรมจริงๆกว่าจะหา Bug เจอ มันไม่ได้ง่ายดายเช่นนี้น่ะครับ ... พี่น้อง

0 comments:

Post a Comment