Skip to content

ตัวแปร ชนิดข้อมูล และตัวดำเนินการ

Author: Pakin Olanraktham & njoop


ตัวแปรคืออะไร

ตัวแปร คือสิ่งที่เราใช้ในการเก็บข้อมูล ซึ่งจะมี ชื่อตัวแปร และ ชนิดของข้อมูล กำหนดไว้ จะคล้ายๆ กับตัวแปรทางคณิตศาสตร์ เช่น \(x = 5, y = 3\) โดยจะมีวิธีการประกาศตัวแปรดังนี้

ชนดขอม ื่อตวแปร = าของขอม;

เช่น

int age = 20; // ค่าของตัวแปรชื่อ age เป็น 20

ชนิดข้อมูลพื้นฐานในภาษา C

ชนิดข้อมูล คำอธิบาย หน่วยความจำที่ใช้ ตัวอย่าง
int จำนวนเต็ม ตั้งแต่ \(-2^{31}\) ถึง \(2^{31} - 1\) 4 bytes int age = 15;
long long จำนวนเต็ม ตั้งแต่ \(-2^{63}\) ถึง \(2^{63} - 1\) 8 bytes long long speed = 3000000000;
float ทศนิยมความละเอียด 6-7 หลัก 4 bytes float pi = 3.14;
double ทศนิยมความละเอียด 16-17 หลัก 8 bytes double price = 99.99;
char ตัวอักษร 1 ตัว 1 byte char grade = 'A';

สามารถศึกษาเพิ่มเติมได้ที่ GeeksforGeeks

ขนาดข้อมูล

หากคุณลองสังเกต ในหนังสือหรือสไลด์ค่ายสอวน. เก่าๆ จะเขียนว่า int เก็บได้ตั้งแต่ \(-2^{15}\) ถึง \(2^{15}-1\) (นั่นก็คือ int เป็น 16 bit)

ค่าของ int นั้น ขึ้นอยู่กับคอมไพล์เลอร์ที่ใช้ ซึ่งในสมัยก่อน นิยมใช้ int เป็น 16 bit แต่ในปัจจุบัน ส่วนใหญ่ใช้ 32 bit ดังนั้นอาจคิดว่า int คือ 32 bit ได้เลย

เราสามารถใช้คำสั่ง sizeof ในการตรวจสอบขนาดของตัวแปรได้ เช่น

ข้อควรระวัง

float และ double เป็นเพียงแค่การประมาณค่าเท่านั้น ดังนั้นค่าอาจไม่แม่นยำ หรือสูญหาย จึงไม่ควรใช้ถ้าหากอยากเก็บทศนิยมที่มีความละเอียดมากขึ้น

เพื่อเป็นตัวอย่าง สามารถรันโค้ดดังต่อไปนี้

#include <stdio.h>

int main() {
    float a = 0.1;
    printf("%.10f", a); // ให้แสดงผลทศนิยม 10 หลักของตัวแปร a
}

จะได้ผลลัพธ์ดังนี้

0.1000000015

ตัวดำเนินการ (operator)

ตัวดำเนินการ เป็นสิ่งที่สามารถใช้ในการทำงานกับตัวแปรต่างๆ เพื่อให้ได้ผลลัพธ์ใหม่

ตัวดำเนินการกำหนดค่า

ถ้าเกิดตัวแปรมีค่าอยู่ แล้วทำการให้ค่าซ้ำ ค่าใหม่ที่ให้จะไปแทนค่าเก่า เช่น

int age = 20;
age = 15; // ค่า age จะมีค่าเป็น 15 แทน

โจทย์ตัวอย่าง

เรามีค่าในตัวแปร x และ y เป็นชนิด int ต้องการสลับค่าสองค่านี้ เช่น สมมติ x = 3, y = 5 เราต้องการให้หลังจากสลับค่าได้เป็น x = 5, y = 3 สามารถทำได้อย่างไร

เฉลย

วิธีที่ผิด:

x = y;
y = x;
ลองมาดูว่าเกิดอะไรขึ้น สมมติให้ตอนแรก x=3 และ y=5

บรรทัดแรก x = y; หลังจากคำสั่งนี้ จะได้ว่า x=5 และ y=5

บรรทัดต่อมาy = x; หลังจากคำสั่งนี้ จะได้ว่า x=5 และ y=5

ซึ่งไม่ใช่สิ่งที่เราต้องการ

สังเกตว่าค่า 3 ของตัวแปร x เดิมนั่นหายไป

วิธีที่ถูกต้อง: เก็บตัวแปรชั่วคราว มาเก็บค่า x ไว้ก่อน สมมติให้ตัวแปรนี้มีชื่อว่า z

int z;
z = x;
x = y;
y = z;

บรรทัดแรก int z; เป็นการประกาศตัวแปร จะได้ว่า x=3 และ y=5

บรรทัดที่สอง z = x หลังจากคำสั่งนี้ จะได้ว่า z=3 x=3 และ y=5

บรรทัดที่สาม x = y หลังจากคำสั่งนี้ จะได้ว่า z=3 x=5 และ y=5

บรรทัดสุดท้าย z = x หลังจากคำสั่งนี้ จะได้ว่า z=3 x=5 และ y=3

ผลลัพธ์สุดท้าย จะได้ x=5 และ y=3 ซึ่งตรงตามที่เราต้องการ

ตัวดำเนินการคณิตศาสตร์

ในภาษา C++ เราสามารถนำตัวแปรแต่ละตัวมาบวกลบคูณหาร กันได้เหมือนในคณิตศาสตร์ เช่น \(z = 3x+7(y+5)\)

มีตัวดำเนินการ ดังนี้

  • การบวก (+)
  • การลบ (-)
  • การคูณ (*)
  • การหาร (ปัดเศษ) (/)
  • เศษจากการหาร (modulo) (%)

สมมติให้ int a = 5 และ int b = 3 จะได้

การดำเนินการ ค่า
a + b \(5 + 3 = 8\)
a - b \(5 - 3 = 2\)
a * b \(5 × 3 = 15\)
a / b \(\lfloor 5/3 \rfloor\) = 1
a % b \(5\) หาร \(3\) เหลือเศษ \(2 = 2\)

ตัวดำเนินการเปรียบเทียบ

เราสามารถเปรียบเทียบตัวแปรต่างๆ เช่น จำนวนเต็ม จะให้ผลลัพธ์เป็นตัวแปรประเภท bool โดยถ้าเป็นจริง จะได้ true หรือ 1 และถ้าเป็นเท็จ จะให้ false หรือ 0

มีตัวดำเนินการ ดังนี้

  • เท่ากับ (==)
  • ไม่เท่ากับ (!=)
  • มากกว่า (>)
  • มากกว่าเท่ากับ (>=)
  • น้อยกว่า (<)
  • น้อยกว่าเท่ากับ (<=)

สมมติให้ int a = 5 และ int b = 3 จะได้

การดำเนินการ ค่าความจริง
a == b เท็จ
a != b จริง
a > b จริง
a >= b จริง
a < b เท็จ
a <= b เท็จ

ตัวดำเนินการเชิงตรรกะ

โดยตัวดำเนินการเหล่านี้ ใช้ในการรวมเงื่อนไขของหลายๆ ตัวแปร จะให้ผลลัพธ์เป็นตัวแปรประเภท bool เหมือนตัวดำเนินการเปรียบเทียบ

มีตัวดำเนินการ ดังนี้

  • และ / AND (&&): x && y จะเป็นจริงก็ต่อเมื่อทั้ง x และ y เป็นจริง
  • หรือ / OR (||): x || y จะเป็นจริงก็ต่อเมื่อ x หรือ y อย่างใดอย่างหนึ่งเป็นจริง
  • ไม่ / NOT (!): !x จะมีค่าตรงข้ามกับ x เสมอ

สมมติให้ bool x = true และ bool y = false จะได้

การดำเนินการ ค่าความจริง
x && y เท็จ
x || y จริง
!x เท็จ
!y จริง

ลำดับความสำคัญ

ซึ่งตัวดำเนินการแต่ละตัวมี ลำดับความสำคัญ โดยเรียงตามตารางดังต่อไปนี้ หากมีลำดับความสำคัญที่เท่ากัน จะทำจากซ้ายไปขวา

ลำดับ ตัวดำเนินการ ความหมาย ตัวอย่าง
1 () วงเล็บ (a + b) * c
2 *, /, % คูณ, หาร, หารเอาเศษ a * b, a / b, a % b
3 +, - บวก, ลบ a + b, a - b
4 <, <=, >, >= เปรียบเทียบตัวเลข a < b, a >= c
5 ==, != เท่ากับ, ไม่เท่ากับ a == b, a != c
6 && ตัวเชื่อม AND a && b
7 || ตัวเชื่อม OR a || b
8 = และตัวดำเนินการกำหนดค่าอื่นๆ เช่น +=, -=, *=, /=, %= การกำหนดค่า a = b, a += 1

หมายเหตุ

  • การหารเอาเศษ จะคล้ายกับ mod ในคณิตศาสตร์ เช่น 5 % 3 = 2, 7 % 10 = 7 แต่ต่างกันตรงที่ว่าหากตัวตั้งต้นติดลบ เช่น -a % b เมื่อ a เป็นจำนวนเต็มบวก จะได้ค่าออกมาเป็น -(a % b), -5 % 3 = -2
  • เราสามารถเปลี่ยนประเภทตัวแปรจากจำนวนเต็ม ไปเป็นทศนิยมได้ โดยการ (data_type) variable เช่น (float) x; ซึ่งวิธีนี้ สำคัญมากหากเราต้องการหารจำนวนเต็มสองจำนวน ให้ออกมาเป็นทศนิยม เพราะหากเศษ หรือ ส่วน ตัวใดตัวหนึ่งเป็นทศนิยม จะได้คำตอบออกมาเป็นทศนิยม เช่น ((float) x) / y;