September 4th, 2008

operation น่ารู้ in c

No Comments », C/C++, by Emperor_bear

วันนี้ผมมีเรื่องน่ารู้เล็กน้อยที่บางคนอาจจะยังไม่ทราบที เกี่ยวกับการใช้operator ในภาษา c มาให้นะครับ

เราลองเขียนcodeตามข้อมความด้านล่างดูนะครับ

 

#include <stdio.h>

int main () {

    int x = 0;

    int y = 0;

    int z = 0;

         printf("x = %d\n",x);

         printf("y = %d\n",y);

         printf("z = %d\n",z);

         printf("x+1 = %d \n",x+1);

         printf("y++ = %d \n",y++);

         printf("++z = %d \n",++z);

 return 0;

}

จะเกิดไรขึ้นอะ???

จากcodeดังกล่าวจะเห็นผลลัพธ์ออกมา

x = 0

y = 0

z = 0

x+1 = 1 

y++ = 0 

++z = 1 

เอ.. y ทำไมมันแปลกกว่าเพื่อน 

เหตุผลที่ y นั้นมีค่า = 0 นั้นเพราะว่า y++ มันจะทำการแสดงค่า y ก่อน แล้วค่อย + ค่าเข้าไปใน y อีก 1 หากเราลอง printf(“y = %d”,y); อีกครั้งหนึ่ง เราก็จะเห็นว่าค่า y ตอนนี้ก็จะ = 1 แล้ว

ทีนี้เราลองเอาการเพิ่มลดค่าต่างๆมาในเงื่อนไขกันนะครับ

ลองพิมพ์ code ตามด้านล่างดูนะครับ

#include <stdio.h>

int main () {

    int x = 0;

    int y = 0;

    int z = 0;

           if(x+1 == 1){

                    printf("x = %d\n",x); 

     }

           if(y++ == 1){

                    printf("y = %d\n",y);

     }

           else{

                    printf("y != 1 and now y = %d\n",y);

     }

           if(++z == 1){

                    printf("z = %d\n",z); 

     }

           return 0;

}

ผลลัพธ์ที่ออกมาจะเป็นไปตามด้านล้างนะครับ

x = 0

y != 1 and now y = 1

z = 1

เห็นได้ว่า

กรณี x

    if จะทำการตรวจสอบค่าของ x ก่อนว่าเมื่อ x+1 เท่ากับ 1 หรือเปล่า ซึ่งเป็นจริง มันเลย print ค่า x ออกมาแต่ค่า x ออกมาเป็น 0 เพราะมันตรวจสอบค่า x อย่างเดียว แต่มันไม่ได้เปลี่ยนค่า x ดังนั้น x จึงยังมีค่า เท่ากับ 0 อยู่

กรณี y

    if จะตรอจสอบจาก y++ ว่ามีค่าเท่ากับ 1 หรือไม่ แต่ y++ มันจะส่งค่า y ให้ if ตรวจสอบก่อนแล้วจึงเพิ่มค่า y ดังนั้นจึงไม่เข้ากรณี จึงได้ผลลัพธ์ของ else ซึ่ง print ผลลัพธ์ออกมาดังกล่าว และเห็นว่าค่า y ที่ถูก print ออกมาเท่ากับ 1 เพราะมันถูกเพิ่มค่าเข้าไปแล้ว แสดงว่าการเขียน y++ ในพวกเงื่อนไขต่างๆก็เป็นการเปลี่ยนค่าของตัวแปรด้วย ไม่เหมือนกับ x+1

กรณี z

    if จะตรวจสอบ ค่าของ ++z ซึ่ง ++z มันจะเพิ่มค่า z ก่อนแล้วจึงส่งให้ if ตรวจสอบซึ่งเป็นจริง และค่า z ออกมาก็ได้เป็น 1 ซึ่งถูกเปลี่ยนค่าไปแล้ว

 

คงจะเห็นแล้วใช้มั้ยครับว่า ความแตกต่างระหว่าง +n (n = number) กับ ++ หวังว่าคงนำไปตรวจสอบ code ของตัวเองได้นะครับบางทีอาจเกิดความผิดพลาดตรงส่วนนี้ก็ได้

Last 5 posts by Emperor_bear

Leave a Reply