10.ประเภทของตัวแปรและขนาดพื้นที่จัดเก็บ (variable types and storage size)

ประเภทของตัวแปรและขนาดพื้นที่จัดเก็บ (variable types and storage size)


 ชนิดข้อมูล (Data Type)    ชนิดข้อมูลเป็นสิ่งจำเป็นพื้นฐานที่จะต้องกำหนดให้ถูกต้องหรือเหมาะสมกับความต้องการใช้งานเพื่อให้การทำงานมีประสิทธิภาพ ซึ่งภาษาซีมีชนิดข้อมูลให้เลือกหลายข้อมูลหลายรูปแบบโดยผู้เขียนโปรแกรมจะต้องพิจารณาจากความจำเป็น และวัตถุประสงค์ของการใช้งานตาราง แสดงชนิดข้อมูล (Data Type) ขนาดการจัดเก็บ และขอบเขตข้อมูล (Range)
  ชนิดของตัวแปรในภาษาซี
ชนิดของตัวแปรขนาด (bits)ขอบเขตข้อมูลที่เก็บ
char8-128 ถึง 127ข้อมูลชนิดอักขระ ใช้เนื้อที่ 1 byte
unsigned char80 ถึง 255ข้อมูลชนิดอักขระ ไม่คิดเครื่องหมาย
int16-32,768 ถึง 32,767ข้อมูลชนิดจำนวนเต็ม     ใช้เนื้อที่ 2 byte
unsigned int160 ถึง 65,535ข้อมูลชนิดจำนวนเต็ม   ไม่คิดเครื่องหมาย
short8-128 ถึง 127ข้อมูลชนิดจำนวนเต็มแบบสั้น ใช้เนื้อที่ 1 byte
unsigned short80 ถึง 255ข้อมูลชนิดจำนวนเต็มแบบสั้น ไม่คิดเครื่องหมาย
long32-2,147,483,648 ถึง 2,147,483,649ข้อมูลชนิดจำนวนเต็มแบบยาว ใช้เนื้อที่ 4 byte
unsigned long320 ถึง 4,294,967,296ข้อมูลชนิดจำนวนเต็มแบบยาว ไม่คิดเครื่องหมาย
float323.4*10e(-38) ถึง 3.4*10e(38)ข้อมูลชนิดเลขทศนิยม  ใช้เนื้อที่ 4 byte
double643.4*10e(-308) ถึง 3.4*10e(308)ข้อมูลชนิดเลขทศนิยม  ใช้เนื้อที่ 8 byte
long double1283.4*10e(-4032) ถึง 1.1*10e(4032)ข้อมูลชนิดเลขทศนิยม  ใช้เนื้อที่ 16 byte
     ซึ่งจากตารางชนิดข้อมูลที่กล่าวมา สามารถแบ่งประเภทของชนิดข้อมูลได้ 3 ประเภท คือ     2.1  ชนิดข้อมูลแบบจำนวนเต็ม (Integer Type)     2.2  ชนิดข้อมูลแบบทศนิยม (Floating Point Type)     2.3  ชนิดข้อมูลแบบตัวอักษร (Character Type)
ตาราง แสดงรหัสรูปแบบการแสดงผลข้อมูล
format codeรูปแบบของการแสดงผล
%cการแสดงผลแบบ 1 อักขระ
%sการแสดงผลแบบข้อความ
%dการแสดงผลแบบเลขจำนวนเต็ม
%fการแสดงผลแบบเลขจำนวนทศนิยม หรือจำนวนจริง
%eการแสดงผลแบบเลขจำนวนทศนิยมยกกำลัง
%gการแสดงผลแบบเลขทศนิยมเหมือน % และ %c แต่สั้นกว่า
%pการแสดงค่า Address ของตัวแปร หรือค่าของ      พอยน์เตอร์
%iการแสดงผลแบบเลขจำนวนเต็ม
%oการแสดงผลแบบเลขฐาน 8 (ไม่มีเครื่องหมาย)
%uการแสดงผลเลขฐาน 10 แบบไม่รวมเครื่องหมาย       (unsigned )
%xการแสดงผลแบบเลขฐาน 16 (ไม่มีเครื่องหมาย)     ของตัวอักษร a-f
%Xการแสดงผลแบบเลขฐาน 16 (ไม่มีเครื่องหมาย)     ของตัวอักษร A-F
fPC1h 2.1  ชนิดข้อมูลแบบจำนวนเต็ม (Integer Type)     ข้อมูลชนิดเลขจำนวนเต็ม คือ ข้อมูลที่เป็นตัวเลขจำนวนเต็มแบบไม่มีทศนิยม โดยในภาษาซียังแบ่งชนิดข้อมูลแบบเลขจำนวนเต็มออกเป็นข้อมูลชนิดเลขจำนวนเต็มแบบสั้น (int) และข้อมูลชนิดเลขจำนวนเต็มแบบยาว (long integer)
                   
     2.1.1  ข้อมูลชนิดเลขจำนวนเต็มแบบสั้น (int/short int)
     ตัวแปรที่ได้กำหนดในรูปแบบ int จะใช้พื้นที่หน่วยความจำขนาด 2 ไบต์หรือ 16 บิต เพื่อจัดเก็บชุดตัวเลขทั้งค่าบวกและค่าลบ มีค่าอยู่ระหว่าง -32 ,768 ถึง 32 ,676 โดยมีรูปแบบการประกาศตัวแปรดังต่อไปนี้
Int variable_name;
     1) ข้อมูลชนิดเลขจำนวนเต็มแบบยาว (long integer)     ข้อมูลชนิดเลขจำนวนเต็มแบบยาว หรือ long int จะใช้พื้นที่หน่วยจำมากกว่าข้อมูลชนิด int โดยจะใช้ขนาด 4 ไบต์ หรือ 32 บิต เพื่อให้สามารถจัดเก็บชุดตัวเลขที่มีช่วงตัวเลข (Data Rang) ที่กว้างหรือยาวกว่าเป็นสองเท่า ซึ่งสามารถจัดเก็บค่าตัวเลขระหว่าง -2 ,147,483,648 ถึง 2 ,147,483,647 โดยมีรูปแบบการประกาศตัวแปรดังต่อไปนี้
Long Int variable_name;
      2) ข้อมูลเลขจำนวนเต็มเฉพาะค่าบวก (Unsigned int)      ข้อมูลเลขจำนวนเต็มเฉพาะค่าบวก หรือ Unsigned int คือการกำหนดให้ค่าของ Integer มีค่าเฉพาะที่เป็นบวก ดังนั้นตัวแปรที่ถูกกำหนดให้มีชนิดแบบนี้จะมีค่าเพิ่มขึ้นจากเดิมเป็น 2 เท่า ดังนั้นตัวแปรที่กำหนดให้มีชีวิตแบบนี้จะมีค่าเพิ่มขึ้นจากเดิมเป็น 2 เท่า ดังนั้น usigned int จะมีค่าระหว่าง 0 ถึง 65,353
Unsigned Int variable_name;
      3)  ชนิดข้อมูลแบบทศนิยม (Floating Point Type)       ชนิดข้อมูลแบบทศนิยม เป็นค่าตัวเลขจำนวนจริงหรือค่าตัวเลขที่มีจุดทศนิยม โดยชนิดข้อมูลแบบทศนิยมนี้สามารถกำหนดเพื่อใช้งานตามชนิดต่างๆ ได้ตามความเหมาะสม ซึ่งขึ้นอยู่กับความต้องการของปริมาณข้อมูลที่จะนำไปใช้งาน เช่น float, double หรือ long double     
               
       4) ชนิดข้อมูลเลขทศนิยมแบบ float (Single precision floating point)
       ชนิดข้อมูลเลขทศนิยมแบบ float นี้ มีขนาดจำนวนบิตเท่ากับ 32 บิต จัดเก็บช่วงข้อมูลระหว่าง 3.4 * 10 -38 และสามารถจัดเก็บตำแหน่งทศนิยมได้ 7 ตำแหน่ง ( 3.4E +/ -38 ) โดยมีรูปแบบการประกาศตัวแปรดังต่อไปนี้
float variable_name;
fPC1h 2.2 รูปแบบการประกาศตัวแปรแบบ float       1) ชนิดข้อมูลเลขทศนิยมแบบ double (Double precision floating point)       ชนิดข้อมูลเลขทศนิยมแบบ double มีขนาดจำนวนบิตเท่ากับ 64 บิต จัดเก็บช่วงข้อมูลระหว่าง 3.4 * 10 -308 ถึง 1.7 * 10 308 และสามารถจัดเก็บตำแหน่งทศนิยมได้ 15 ตำแหน่ง (1.7E+/-308) โดยมีรูปแบบการประกาศตัวแปรดังต่อไปนี้
double variable_name;
       2) ชนิดข้อมูลเลขทศนิยมแบบ long double (Long double precision floating point)       ชนิดข้อมูลแบบ long double มีจำนวนบิตเท่ากับ 801 บิต หรือมากกว่านั้นจัดเก็บช่วงข้อมูลระหว่าง 3.4 * 10 -4932 ถึง 1.1 * 10 4932 และสามารถเก็บตำแหน่งทศนิยมได้ 19 ตำแหน่ง ( 1.2E+ / -4932 ) โดยมีรูปแบบการประกาศตัวแปรดังต่อไปนี้
long double variable_name;
fPC1h 2.3 รูปแบบการประกาศตัวแปรแบบ long double       1) ชนิดข้อมูลแบบตัวอักษร (Character Type)       ชนิดข้อมูลแบบตัวอักษร หรือ char จัดเก็บข้อมูลในรูปแบบตัวอักษรหรืออักขระอื่นๆ ซึ่งสามารถเก็บข้อความเพียงหนึ่งอักขระเท่านั้น ซึ่งการจัดเก็บตัวอักษรแบบหลายๆ ตัวจะเรียกว่าสตริง (String) ซึ่งประกอบด้วยกลุ่มของข้อความต่างๆ ตามขนาดที่กำหนดมีรูปแบบดังนี้
Char variable_name;
รูปแบบการประกาศตัวแปรแบบ char
Char variable_name [n];
รูปแบบการประกาศตัวแปรแบบสตริง โดย n ในที่นี้คือขนาด หรือจำนวนข้อความที่ต้องการ

เอกสารเพิ่มเติม : ตัวแปรและชนิดของข้อมูล






ตัวอย่างโปรแกรม

#include <iostream>
#include <iomanip>

using namespace std;

void printArray(int a[], size_t sz) {
    for (int i = 0; i < sz; ++i) {
        cout << setw(4) << a[i] << " ";
    }
}

void selectionSort(int a[], size_t sz) {
    for (int i = 0; i < sz - 1; i++) {
        int idxMin = i;
        for (int j = i + 1; j <= sz - 1; j++) {
            if (a[j] < a[idxMin]) {
                idxMin = j;
            }
        }
        swap(a[i], a[idxMin]);
        printArray(a, sz);
        cout << " | swap(" << a[i] << "<->" << a[idxMin] << ")" << endl;
    }
}

int main() {
    int a[] = {8, 10, 3, 9, 4, 7};
    size_t sz = sizeof(a) / sizeof(a[0]);
    printArray(a, sz);
    cout << endl;

    selectionSort(a, sz);
    cout << "-----------" << endl;
    printArray(a, sz);
    return 0;

}