ประเภทของตัวแปรและขนาดพื้นที่จัดเก็บ (variable types and storage size)
ชนิดข้อมูล (Data Type) ชนิดข้อมูลเป็นสิ่งจำเป็นพื้นฐานที่จะต้องกำหนดให้ถูกต้องหรือเหมาะสมกับความต้องการใช้งานเพื่อให้การทำงานมีประสิทธิภาพ ซึ่งภาษาซีมีชนิดข้อมูลให้เลือกหลายข้อมูลหลายรูปแบบโดยผู้เขียนโปรแกรมจะต้องพิจารณาจากความจำเป็น และวัตถุประสงค์ของการใช้งานตาราง แสดงชนิดข้อมูล (Data Type) ขนาดการจัดเก็บ และขอบเขตข้อมูล (Range)
ชนิดของตัวแปรในภาษาซี
ชนิดของตัวแปร | ขนาด (bits) | ขอบเขต | ข้อมูลที่เก็บ |
char | 8 | -128 ถึง 127 | ข้อมูลชนิดอักขระ ใช้เนื้อที่ 1 byte |
unsigned char | 8 | 0 ถึง 255 | ข้อมูลชนิดอักขระ ไม่คิดเครื่องหมาย |
int | 16 | -32,768 ถึง 32,767 | ข้อมูลชนิดจำนวนเต็ม ใช้เนื้อที่ 2 byte |
unsigned int | 16 | 0 ถึง 65,535 | ข้อมูลชนิดจำนวนเต็ม ไม่คิดเครื่องหมาย |
short | 8 | -128 ถึง 127 | ข้อมูลชนิดจำนวนเต็มแบบสั้น ใช้เนื้อที่ 1 byte |
unsigned short | 8 | 0 ถึง 255 | ข้อมูลชนิดจำนวนเต็มแบบสั้น ไม่คิดเครื่องหมาย |
long | 32 | -2,147,483,648 ถึง 2,147,483,649 | ข้อมูลชนิดจำนวนเต็มแบบยาว ใช้เนื้อที่ 4 byte |
unsigned long | 32 | 0 ถึง 4,294,967,296 | ข้อมูลชนิดจำนวนเต็มแบบยาว ไม่คิดเครื่องหมาย |
float | 32 | 3.4*10e(-38) ถึง 3.4*10e(38) | ข้อมูลชนิดเลขทศนิยม ใช้เนื้อที่ 4 byte |
double | 64 | 3.4*10e(-308) ถึง 3.4*10e(308) | ข้อมูลชนิดเลขทศนิยม ใช้เนื้อที่ 8 byte |
long double | 128 | 3.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 |
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 ) โดยมีรูปแบบการประกาศตัวแปรดังต่อไปนี้
4) ชนิดข้อมูลเลขทศนิยมแบบ float (Single precision floating point) ชนิดข้อมูลเลขทศนิยมแบบ float นี้ มีขนาดจำนวนบิตเท่ากับ 32 บิต จัดเก็บช่วงข้อมูลระหว่าง 3.4 * 10 -38 และสามารถจัดเก็บตำแหน่งทศนิยมได้ 7 ตำแหน่ง ( 3.4E +/ -38 ) โดยมีรูปแบบการประกาศตัวแปรดังต่อไปนี้
float variable_name; |
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; |
2.3 รูปแบบการประกาศตัวแปรแบบ long double 1) ชนิดข้อมูลแบบตัวอักษร (Character Type) ชนิดข้อมูลแบบตัวอักษร หรือ char จัดเก็บข้อมูลในรูปแบบตัวอักษรหรืออักขระอื่นๆ ซึ่งสามารถเก็บข้อความเพียงหนึ่งอักขระเท่านั้น ซึ่งการจัดเก็บตัวอักษรแบบหลายๆ ตัวจะเรียกว่าสตริง (String) ซึ่งประกอบด้วยกลุ่มของข้อความต่างๆ ตามขนาดที่กำหนดมีรูปแบบดังนี้
Char variable_name; |
รูปแบบการประกาศตัวแปรแบบ char
Char variable_name [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;
}