ตัวดำเนินการและนิพจน์
ตัวดำเนินการรวมค่าต่าง ๆ เป็นนิพจน์ C และ C++ ใช้ร่วมกันเกือบทั้งหมด รวมถึงกฎการหารจำนวนเต็มที่ทำให้มือใหม่แปลกใจ
ตัวดำเนินการและนิพจน์ คืออะไร?
ตัวดำเนินการรวมค่าต่าง ๆ เป็นนิพจน์ C และ C++ ใช้ร่วมกันเกือบทั้งหมด รวมถึงกฎการหารจำนวนเต็มที่ทำให้มือใหม่แปลกใจ
ใช้ตัวดำเนินการเลขคณิต การกำหนดค่า การเปรียบเทียบ และตรรกะใน C และ C++
ประเด็นสำคัญ
- เปิด compiler warning และแก้ทุกคำเตือน
- รู้ type และ lifetime ของทุกค่า
- ตรวจ input และขอบเขต array ให้ชัดเจน
ตัวอย่างโค้ด C และ C++
#include <stdio.h>
int main(void) {
int a = 17, b = 5;
printf("a + b = %d\n", a + b);
printf("a - b = %d\n", a - b);
printf("a * b = %d\n", a * b);
printf("a / b = %d\n", a / b); /* integer division drops the fraction */
printf("a %% b = %d\n", a % b); /* remainder */
printf("a / 5.0 = %.1f\n", a / 5.0); /* one double operand gives a double */
int total = 10;
total += 5;
total *= 2;
printf("total = %d\n", total);
int count = 0;
count++;
printf("count = %d\n", count);
/* Comparisons and logical operators give 1 (true) or 0 (false). */
printf("a > b: %d, a == 17: %d\n", a > b, a == 17);
printf("a > 10 && b > 10: %d\n", a > 10 && b > 10);
printf("a > 10 || b > 10: %d\n", a > 10 || b > 10);
return 0;
}
a + b = 22
a - b = 12
a * b = 85
a / b = 3
a % b = 2
a / 5.0 = 3.4
total = 30
count = 1
a > b: 1, a == 17: 1
a > 10 && b > 10: 0
a > 10 || b > 10: 1
#include <iostream>
int main() {
int a = 17, b = 5;
std::cout << "a + b = " << a + b << '\n';
std::cout << "a - b = " << a - b << '\n';
std::cout << "a * b = " << a * b << '\n';
std::cout << "a / b = " << a / b << '\n'; // integer division drops the fraction
std::cout << "a % b = " << a % b << '\n'; // remainder
std::cout << "a / 5.0 = " << a / 5.0 << '\n'; // one double operand gives a double
int total = 10;
total += 5;
total *= 2;
std::cout << "total = " << total << '\n';
int count = 0;
count++;
std::cout << "count = " << count << '\n';
// bool values print as true/false with std::boolalpha.
std::cout << std::boolalpha;
std::cout << "a > b: " << (a > b) << ", a == 17: " << (a == 17) << '\n';
std::cout << "a > 10 && b > 10: " << (a > 10 && b > 10) << '\n';
std::cout << "a > 10 || b > 10: " << (a > 10 || b > 10) << '\n';
}
a + b = 22
a - b = 12
a * b = 85
a / b = 3
a % b = 2
a / 5.0 = 3.4
total = 30
count = 1
a > b: true, a == 17: true
a > 10 && b > 10: false
a > 10 || b > 10: true
เปรียบเทียบ C และ C++
การหาร int ด้วย int จะตัดส่วนทศนิยมทิ้ง 17 / 5 จึงเป็น 3 ถ้าต้องการเก็บไว้ให้ตัวถูกดำเนินการตัวหนึ่งเป็น double การเปรียบเทียบและ && / || ให้ 1 หรือ 0 ใน C และ true หรือ false ใน C++ ซึ่ง std::boolalpha พิมพ์เป็นคำ
C แสดง API แบบ procedural และรายละเอียด representation อย่างชัดเจน
C++ รักษา low-level model และเพิ่ม type ที่ปลอดภัยกว่า
แบบฝึกหัด
รันทั้งสองเวอร์ชันแล้วแก้ไขเพื่อสังเกตความแตกต่างของภาษา
- เพิ่ม input ผิดและค่าขอบเขต
- Compile ด้วย -Wall -Wextra -Wpedantic
- แยก declaration และ implementation
ฝึกด้วยโจทย์
ใช้สิ่งที่เรียนในบทนี้แก้ปัญหาจริง ทุกโจทย์รันในเบราว์เซอร์ พร้อมการทดสอบทันทีและรีวิวจาก AI
- Celsius to Fahrenheit Convert a temperature from Celsius to Fahrenheit. ง่าย
- Simple Interest Find the total amount after simple interest. ง่าย