ตัวแปร ชนิดข้อมูล และตัวดำเนินการ
Author: Pakin Olanraktham & njoop
ตัวแปรคืออะไร
ตัวแปร คือสิ่งที่เราใช้ในการเก็บข้อมูล ซึ่งจะมี ชื่อตัวแปร และ ชนิดของข้อมูล กำหนดไว้ จะคล้ายๆ กับตัวแปรทางคณิตศาสตร์ เช่น \(x = 5, y = 3\) โดยจะมีวิธีการประกาศตัวแปรดังนี้
เช่น
ชนิดข้อมูลพื้นฐานในภาษา 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'; |
bool |
ค่าความจริง มี 2 สถานะคือ จริง (1 / true) หรือ เท็จ (0 / false) | 1 byte | bool x = true; |
สามารถศึกษาเพิ่มเติมได้ที่ GeeksforGeeks
ขนาดข้อมูล
หากคุณลองสังเกต ในหนังสือหรือสไลด์ค่ายสอวน. เก่าๆ จะเขียนว่า int เก็บได้ตั้งแต่ \(-2^{15}\) ถึง \(2^{15}-1\) (นั่นก็คือ int เป็น 16 bit)
ค่าของ int นั้น ขึ้นอยู่กับคอมไพล์เลอร์ที่ใช้ ซึ่งในสมัยก่อน นิยมใช้ int เป็น 16 bit แต่ในปัจจุบัน ส่วนใหญ่ใช้ 32 bit
เราสามารถใช้คำสั่ง sizeof ในการตรวจสอบขนาดของตัวแปรได้
ข้อควรระวัง
float และ double เป็นเพียงแค่การประมาณค่าเท่านั้น ดังนั้นค่าอาจไม่แม่นยำ หรือสูญหาย จึงไม่ควรใช้ถ้าหากอยากเก็บทศนิยมที่มีความละเอียดมากขึ้น
เพื่อเป็นตัวอย่าง สามารถรันโค้ดดังต่อไปนี้
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
float a = 0.1;
cout << fixed << setprecision(10) << a; // ให้แสดงผลทศนิยม 10 หลักของตัวแปร a
}
จะได้ผลลัพธ์ดังนี้
0.1000000015
ตัวดำเนินการ (operator)
ตัวดำเนินการ เป็นสิ่งที่สามารถใช้ในการทำงานกับตัวแปรต่างๆ เพื่อให้ได้ผลลัพธ์ใหม่
ตัวดำเนินการกำหนดค่า
ถ้าเกิดตัวแปรมีค่าอยู่ แล้วทำการให้ค่าซ้ำ ค่าใหม่ที่ให้จะไปแทนค่าเก่า เช่น
โจทย์ตัวอย่าง
เรามีค่าในตัวแปร x และ y เป็นชนิด int ต้องการสลับค่าสองค่านี้ เช่น สมมติ x = 3, y = 5 เราต้องการให้หลังจากสลับค่าได้เป็น x = 5, y = 3 สามารถทำได้อย่างไร
เฉลย
วิธีที่ผิด:
ลองมาดูว่าเกิดอะไรขึ้น สมมติให้ตอนแรกx=3 และ y=5
บรรทัดแรก x = y; หลังจากคำสั่งนี้ จะได้ว่า x=5 และ y=5
บรรทัดต่อมาy = x; หลังจากคำสั่งนี้ จะได้ว่า x=5 และ y=5
ซึ่งไม่ใช่สิ่งที่เราต้องการ
สังเกตว่าค่า 3 ของตัวแปร x เดิมนั่นหายไป
วิธีที่ถูกต้อง: เก็บตัวแปรชั่วคราว มาเก็บค่า x ไว้ก่อน สมมติให้ตัวแปรนี้มีชื่อว่า 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;