2. ตัวดำเนินกำรทำงคณิตศำสตร์
พิจารณาคาสั่งต่อไปนี้
a = b + c;
ความหมายของคาสั่งนี้คือการบวกค่าของตัวแปร b เข้ากับตัวแปร c แล้วเก็บผลลัพธ์ลงในตัวแปร
a
ดังนั้น การเขียนสมการในภาษาซีคือ
"การนาผลลัพธ์ของการคานวณในด้านขวาของเครื่องหมายเท่ากับ (=) ไปใส่ในตัวแปรทาง
ด้านซ้าย"
สาหรับตัวดาเนินการทางคณิตศาสตร์ได้แก่ + (บวก), - (ลบ), * (คูณ), / (หาร), % (มอดดูโล
หรือ มอด หรือ หารเอาเศษ)
3. ตัวดำเนินกำรทำงคณิตศำสตร์อย่ำงย่อ
การเพิ่มค่า (increment)/ลดค่า (decrement) ด้วยสัญลักษณ์ ++, พิจารณา
code ต่อไปนี้
/*1*/ int a = 1;
/*2*/ b = ++a;
บรรทัดที่ 1 เป็นการประกาศตัวแปรชนิดจานวนเต็มชื่อ a และกาหนดค่าเริ่มต้นให้เท่ากับ 1
บรรทัดที่ 2 เป็นการเพิ่มค่าตัวแปร a ขึ้น 1 ค่า แล้วจึง copy ค่าของตัวแปร a ไปให้ตัว
แปร b
code ดังกล่าวมีรูปแบบเต็มดังนี้
/*1*/ int a = 1, b;
/*2*/ a = a+1;
/*3*/ b = a;
หรือกล่าวได้ว่าเป็นการเพิ่มค่า a ขึ้น 1 ค่า ก่อนที่จะกาหนดค่านั้นให้ตัวแปร b
4. นอกจากเราจะเพิ่มค่าตัวแปรโดยใช้ a++ ได้ด้วยโดยมีความหมายแตกต่างกันเล็กน้อย
ดังนี้
/*1*/ int a = 1, b;
/*2*/ b = a;
/*3*/ a = a+1;
หรือกล่าวได้ว่าเป็นการกาหนดค่าในตัวแปร b ให้กับตัวแปร a ก่อน แล้วค่อยเพิ่มค่าใน
ตัวแปร a ขึ้น 1 ค่า
ในทานองเดียวกัน เราสามารถลดค่าของตัวแปรใดๆ ด้วยเครื่องหมาย -- ได้เช่นกัน
การลดรูปคาสั่ง
พิจารณาตัวอย่างต่อไปนี้
/*1*/ int a = 5, b = 10;
/*2*/ a = a+b;
5. code ในบรรทัดที่ 2 เป็นการบวกค่าของตัวแปร a กับตัวแปร b แล้วคืนผลลัพธ์
กลับไปเก็บไว้ในตัวแปร a (เท่ากับ 15)
ซึ่งสามารถลดรูปได้ดังนี้
/*1*/ int a = 5, b = 10;
/*2*/ a += b;
ในทานองเดียวกัน เราสามารถนาหลักการลดรูปนี้ไปใช้กับตัวดาเนินการ - (ลบ), *
(คูณ), / (หาร), % (มอด) ได้
9. /*1*/ int a = 3;
/*2*/ a >=0 && a<=10;
/*3*/ a >=0 && a<=10 && (a%2 == 0);
/*4*/ a >=0 && a<=10 && !(a%2 == 0);
บรรทัดที่ 2 จะให้ผลลัพธ์เป็นจริง (ค่า a = 3 อยู่ระหว่าง 0 ถึง 10)
บรรทัดที่ 3 จะได้ผลลัพธ์เป็นเท็จ (a = 3 ซึ่ง mod 2 แล้วเท่ากับ 1 ไม่เท่ากับ 0)
บรรทัดที่ 4 จะได้ผลลัพธ์เป็นจริง (a = 3 ซึ่ง mod 2 แล้วเท่ากับ 1 ไม่เท่ากับ 0 ได้
ผลลัพธ์เป็นเท็จ แต่ผลนั้นถูก NOT ทาให้เป็นจริง)
10. กำรเปลี่ยนชนิดของตัวแปร (casting)
ในการดาเนินการใดๆ (คณิตศาสตร์/เปรียบเทียบ/ตรรกศาสตร์) ระหว่างตัวแปร 2 ตัว, ตัวแปร
ดังกล่าวจาเป็นจะต้องมีชนิดเดียวกัน
แต่ในการใช้งานจริงอาจจาเป็นต้องดาเนินการกับตัวแปรต่างชนิด ดังนั้นเราอาจต้องแปลงตัวแปร
ให้เป็นชนิดเดียวกันก่อน
โดยการแปลงแบ่งออกเป็น 2 แบบดังนี้
การแปลงชนิดตัวแปรแบบอัตโนมัติ
เมื่อมีการดาเนินการระหว่างสองตัวแปรต่างชนิดกัน ตัวแปลภาษาจะแปลงชนิดให้อัตโนมัติ โดย
เลือกแปลงตัวแปรที่มีขอบเขตเล็กกว่าเช่น
/*1*/ int a = 2;
/*2*/ float b = 3.5, sum;
/*3*/ sum = a + b;
จะเห็นว่าตัวแปร a เป็นจานวนเต็มซึ่งมีขอบเขตเล็กกว่าตัวแปร b ซึ่งเป็นชนิดทศนิยม (ศึกษา
ขอบเขตของตัวแปรได้จากตารางชนิดของตัวแปรในภาษาซี)
11. ดังนั้นตัวแปร a จะถูกแปลงเป็นชนิดทศนิยมก่อนทาการบวกในบรรทัดที่ 3 ต่อไป
พิจารณาคาสั่งด้านล่าง
/*1*/ int a = 2, sum;
/*2*/ float b = 3.5;
/*3*/ sum = a + b;
ถึงแม้ว่าตัวแปร a จะถูกแปลงเป็นชนิดทศนิยมในขั้นตอนการบวก แต่ผลลัพธ์นั้นถูกนาไป
เก็บในตัวแปร sum ซึ่งเป็นชนิดจานวนเต็มและ มีขนาดเล็กกว่าชนิดทศนิยม
เพื่อให้ตัวแปรที่มีขนาดเล็กกว่าสามารถเก็บข้อมูลนี้ได้ ตัวแปรภาษาจึงต้องแปลงผลลัพธ์
เป็นชนิดจานวนเต็มโดยการตัดทศนิยมออก ค่าตัวแปร sum จึงเท่ากับ 3