สุพจน์ สวัตติวงศ์ tohpus@hotmail.com C# Operation สุพจน์ สวัตติวงศ์ tohpus@hotmail.com Reference: นิรันดร์ ประวิทย์ธนา, เก่ง C# ให้ครบสูตร ฉบับ OOP, วิตตี้กรุ๊ป http://tidno1.exteen.com/20050604/c-tutorial-2
Operation ใน C# Operation ใน C# แบ่งออกเป็น 3 ชนิดคือ Numerical Operation String Operation Boolean Operation
Numerical Operation เป็น Operation ในการคำนวณทางคณิตศาสตร์ สามารถใช้ได้มั้งตัวเลข, เลขทศนิยม และตัวอักษร หลักการเหมือนการคำนวณทางคณิตศาสตร์โดยทั่วไป เครื่องหมายที่ใช้ =, +, -, *, /, %, ++, --, () เป็นต้น
การหาร ในภาษาคอมพิวเตอร์ มีการหารอยู่ 2 แบบคือ Divide หรือ Div (/) คือการหารโดยปกติ หากตัวแปรที่ทำการหารเป็นจำนวนเต็ม Div จะทำการหารโดยตัดเศษทิ้ง หากตัวเป็นจำนวนจริง(ทศนิยม) จะแสดงค่าผลลัพธ์การหารตามปกติ Modulus หรือ Mod(%)คือการหารเอาเศษไว้ใช้งาน Console.WriteLine("17.0%2.0="+(17.0 % 2.0) + " 17%2=" + (17 % 2)); Console.WriteLine("17.0/2.0="+(17.0 / 2.0) + " 17/2=" + (17 / 2)); 17.0%2.0=1 17%2=1 17.0/2.0=8.5 17/2=8
Increment Operator และ Decrement Operator เป้าหมายเพื่อให้กระชับมากขึ้น
ตัวอย่าง int x = 3, y = 2, z; float a, b, c; x = 3; Console.WriteLine("x= " + x); Console.WriteLine("x++ =" + (x++)); x= 3 x++ =3 x= 4 x = 3; Console.WriteLine("x= " + x); Console.WriteLine("++x =" + (++x)); x= 3 ++x =4 x= 4 a = 3.0f; Console.WriteLine("a= " + a); Console.WriteLine("a++ =" + (a++)); a= 3 a++ =3 a= 4
ตัวอย่าง char d='A'; Console.WriteLine("d= " + d); d= B
x++ เท่ากับ x+1? จากที่ผ่านมาจะสังเกตุว่า x++ จะดูเหมือนจะเท่ากับ x+1? Console.WriteLine("x= " + x); Console.WriteLine("x++ =" + (x++)); x= 3 x++ =3 x= 4 x = 3; Console.WriteLine("x= " + x); Console.WriteLine("x+1 =" + (x+1)); x= 3 x+1 =4
x++ เท่ากับ x+1? x= 4 x++ =4 x+1 =4 x+1 =4 Console.WriteLine("x= " + x); Console.WriteLine("++x =" + (++x)); x= 3 x++ =4 x= 4 x = 3; Console.WriteLine("x= " + x); Console.WriteLine("x+1 =" + (x+1)); x= 3 x+1 =4 x = 3; Console.WriteLine("x= " + x); Console.WriteLine("x=x+1 =" + (x=x+1)); x= 3 x+1 =4 x= 4
Assignment Operator นอกจากเครื่องหมาย = ยังมี Operator อื่นๆ อีกเช่น +=, -=, *=, /=, %= โดยเครื่องหมายเหล่านี้ทำให้ Code ดูกระชับมากขึ้น Assignment Operator มีความหมายเท่ากับ x+=3; x=x+3; x-=3; x=x-3; x*=3; x=x*3; x/=3; x=x/3; x%=3; x=x%3;
ขั้นตอนการคำนวณของคอมพิวเตอร์ ในตัวดำเนินการทางคณิตศาสตร์ ขั้นตอนการคำนวณของคอมพิวเตอร์ ในตัวดำเนินการทางคณิตศาสตร์ วงเล็บ “( )” ไม่ว่าอย่างไรก็ตาม คอมพิวเตอร์จะทำการคำนวณในวงเล็บให้เสร็จก่อนดำเนินการต่อไป “++”และ “--” กรณีที่เป็น++ อยู่ด้านหน้า เช่น ++x นับจากซ้ายไปขวาหากเจอเครื่องหมายเหล่านี้จะทำก่อน การคูณ “*”และ การหาร “ /”, “%” นับจากซ้ายไปขวา เจอเครื่องหมายใด (คูณ หรือ หาร) ก็จะทำก่อน การบวก และ ลบ “+”,“-” จากซ้ายไปขวาเช่นกัน เจอเครื่องหมายใด (บวก หรือ ลบ) ก็จะทำก่อน “++”และ “--” กรณีที่เป็น++ อยู่ด้านหลัง เช่น x++ นับจากซ้ายไปขวาหากเจอเครื่องหมายเหล่านี้จะทำก่อน
Exercise int a=2, b=3, c=4; float d=5.0, e=7.0, f=9.0; 5+3 4-5 -8+9 4+-2*-5-(6*2) (20/5)+(9-5)*6/3 a+=5 a*=2 a/=3 a%= 6 144/3 144.0/3 144.0/3.0f 1/2 1.0/2 12%3 12.0%3 3%2 125/10 125/100 125%10 125%10 125%100 125%1000 b+c*d/e f+c*1/2.0 b+c*2.0 (b++) +d ++b b-- (c++)+(++c)
String Operation เป็น Operation ที่ทำงานกับ String ด้วย operator “+” String s1, s2, s3; s1 = "1"; s2 = "6"; s3 = s1 + s2; Console.WriteLine("s1 ===>"+s1+"\ns2 ===>"+s2+"\ns3=s1+s2 ====>"+s3); s1 ===>1 s2 ===>6 s3=s1+s2 ====>16
Boolean Operation หรือ Logical Operation คือ Operation ที่ส่งค่าคืนกลับมาเป็น “True” หรือ “False” เท่านั้น เช่น ==, <=, <, >, >=, !=, &&, || เป็นต้น โดย Logical Operation มีการแบ่งออกเป็น Comparison Operator Logical Operator
Comparison Operator เครื่องหมาย ความหมาย ตัวอย่าง == เท่ากับ a==b < น้อยกว่า a<b <= น้อยกว่าเท่ากับ a<=b > มากกว่า a>b >= มากกว่าเท่ากับ a>=b != ไม่เท่ากับ a!=b
Logical Operator เครื่องหมาย ความหมาย ตัวอย่าง && และ a&&b || หรือ ! ไม่ !b
Exercise int a=2, b=3, c=4; float d=5.0, e=7.0, f=9.0; 2 <=5 10 > 50 (2<5) && (6>1) (5!=6) || (2>3) a!=null c-c==false 0==(int)true a=2+1==b (a=2+1)==b a+c!=b+3 (a=0)==false (a=1)==true (b<b) && (c>c) (a!=-a) || (b>e) c!=e=b f==b=b !true !false !(a=b)==false !(a==b)==false
Bitwise Operators เป็น operator อย่างหนึ่งของ Numerical Operation ที่จะกระทำกับทุก ๆ bit ของ operand ในชนิด integer type(sbyte, short, int, long, byte, ushort, uint, ulong) การทำงานของ Bitwise เป็นการคำนวณที่เร็วกว่าการคำนวณในแบบปกติ เครื่องหมาย ความหมาย ตัวอย่าง & Bitwise And a&b | Bitwise Or a|b ^ Bitwise XOR a^b ~ Bitwise complement ~b << Bitwise Shift Left a<<b >> Bitwise Shift Right a>>b
Truth Table AND a b a&b 1
Truth Table OR a b a|b 1
Truth Table XOR a b a^b 1
Truth Table Complement 1
การคำนวณของ Bitwise Operators สมมติ ตัวแปร a =3; b=2; ให้ทำการเปลี่ยน a และ b เป็นเลขฐาน 2 ก่อน จากนั้นจึงนำมาคำนวณกับ Bitwise ดังนี้ a= 112 b= 102 a&b 0000 0011 0000 0010 a|b 0000 0011 0000 0010 a^b 0000 0011 0000 0010 0000 0001 ~b 0000 0010 1111 1101 b<<1 0000 0010 0000 0100 b>>1 0000 0010 0000 0001 ~ & | & << << 2 3 1 -3 4 1
ประโยชน์ของ Bitwise Operators ใช้ในการคำนวณได้เร็วขึ้น สามารถนำมาใช้ในการ คูณ 2 แบบเร็วๆ ได้เช่น 4<<1 = 8 สามารถมาทำผลหาร2 แบบเร็วๆ ได้เช่นกัน เช่น 18>>1 =9 สามารถใช้ในการทำ Flag ได้ โดยเก็บค่าต่างๆไว้ใน Bit int personal = 1; int group = 2; int all = 4; int user_permission = personal | group; if ((personal & user_permission) != 0) Console.WriteLine("access granted");
Bitwise Assignment Operator โดยเครื่องหมายเหล่านี้ทำให้ Code ดูกระชับมากขึ้น และเหมือนกับ Assignment Operator ปกติ Assignment Operator มีความหมายเท่ากับ x&=3; x=x&3; x|=3; x=x|3; x^=3; x=x^3; x<<=3; x=x<<3; x>>=3; x=x>>3;
Exercise int a = 1, b = 2, c = 3, d = 4, e = 5, f = 7, g =8; a|b a&b&c (a&b)|(a&c) a&(b|c) (a|b)&(a|c) a|(b&c) a^b+c|b a^b d*e/1.0^b f=a|b|d a&b&c a&b|c a|b|d|g a&b&d&g g>>1 g<<1 b<<2 (4*2)>>1 (16)>>3 ~a
สรุปลำดับการใช้งานของ Operator ทั้งหมดใน C# () ++, -- กรณี วางไว้หน้าตัวแปร *, /, % +, - ==, != && || =, +=, -=, /=, %= ++, -- กรณี วางไว้หลังตัวแปร
Enumerations การกำหนด Constant แบบ Enum กำหนดโดยตรงใน namespace ดังนี้ วิธีใช้งานดังต่อไปนี้ enum Color { red, blue, green } // values: 0, 1, 2 enum Access { personal = 1, group = 2, all = 4 } enum Access1 : byte { personal = 1, group = 2, all = 4 } Color c = Color.blue; // enumeration constants must be qualified Access a = Access.personal | Access.group; if ((Access.personal & a) != 0) Console.WriteLine("access granted");
การใช้เครื่องหมายของ enum ใน C# Enumerations ไม่สามารถใช้ int แทนได้ (ยกเว้นถูกกำหนด Type ไว้ก่อน) Enumeration types ถูก inherit จาก object จึงใช้ method (Equals, ToString, ...)ได้ Class System.Enum ครอบคลุมการทำงานบน enumerations (GetName, Format, GetValues, ...).