c# - ตัวดำเนินการ Operators, ชนิดข้อมูล Types, และตัวแปร Variables

12/19/2556 0 Comments

C# Operators, Types, and Variables


วัตถุประสงค์ของบทความนี้นะครับ
  • เข้าใจว่าตัวแปรคืออะไร
  • ชนิดของตัวแปรคืออะไร
  • ตัวดำเนินการคืออะไร
ตัวแปรและชนิดของข้อมูล Variables and Types

          ตัวแปรเป็นภาชนะเก็บข้อมูล คุณสามารถใส่ข้อมูลลงไปในตัวแปรและสามารถเรียกใช้ข้อมูลนั้นผ่านตัวแปรเมื่อต้องการ ความหมายของข้อมูลในตัวแปรนั้นจะถูกระบุได้จาก ชนิดข้อมูลของตัวแปร


1. ข้อมูลชนิดตรรกะ The Boolean Type

          การประกาศตัวแปร boolean จะใช้คำว่า bool ซึ่งจะเก็บค่าเพียง 2 ค่าเท่านั้นคือ true , false  ในภาษาอื่น เช่น ภาษา C, C++ สามารถใช้เลข 0 แทน false และเลข 1 แทน true ได้ ในภาษา C# จะไม่ได้ ในตัวอย่างที่ 1 เป็นการยกตัวอย่างการใช้เขียนโปรแกรม

ตัวอย่างที่ 1 แสดงค่าใน Boolean

using System;

class Booleans
{
    public static void Main()
    {
        bool content = true;
        bool noContent = false;

        Console.WriteLine("It is {0} that C# Station provides C# programming language content.", content);
        Console.WriteLine("The statement above is not {0}.", noContent);
    }
}

ผลลัพธ์


It is True that C# Station provides C# programming language content.
The statement above is not False. 


2. ชนิดข้อมูลตัวเลข Integral Types

          ในภาษา C# Integral Types เป็นหมวดของชนิดข้อมูลที่เป็นตัวเลขจำนวนเต็ม ทั้ง signed, unsigned, และข้อมูลตัวอักษร (char) ซึ่ง char เป็น Unicode character หาอ่านได้่ที่ http://www.unicode.org/

TypeSize (in bits)Range
sbyte8-128 to 127
byte80 to 255
short16-32768 to 32767
ushort160 to 65535
int32-2147483648 to 2147483647
uint320 to 4294967295
long64-9223372036854775808 to 9223372036854775807
ulong640 to 18446744073709551615
char160 to 65535

          ชนิดข้อมูลตัวเลขชุดนี้สามารถนำมาคำนวณทางคณิตศาสตร์ ยกเว้น Char คุณสามารถเลือกใช้ชนิดข้อมูลจากตารางข้างบนนี้ตามความเหมาะสมโดยพิารณาจากค่า Range ให้เหมาะสมกับโปรแกรมของคุณ

ตัวอย่างที่ 2 โปรแกรมจะ number1 และ number2 มาบวกกัน

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
                  int number1, number2;

                  Console.WriteLine("Please enter a number:");
                  number1 = int.Parse(Console.ReadLine());

                  Console.WriteLine("Thank you. One more:");
                  number2 = int.Parse(Console.ReadLine());

                  Console.WriteLine("Adding the two numbers: " + (number1 + number2));

                  Console.ReadLine();
        }
    }
}

3.ชนิดข้อมูลเลขทศนิยม Floating Point and Decimal Types

          ชนิดข้อมูลทศนิยมทั้ง float และ double จะถูกใช้แทนจำนวนจริง ส่วน decimal ส่วนมากใช้ในทาง financial หรือ money values.

TypeSize (in bits)precisionRange
float327 digits1.5 x 10-45 to 3.4 x 1038
double6415-16 digits5.0 x 10-324 to 1.7 x 10308
decimal12828-29 decimal places1.0 x 10-28 to 7.9 x 1028

          การใช้ชนิดข้อมูลทศนิยม ( Floating Point ) เรามันใช้เมื่อมีการหารหรือคำนวณเศษส่วนที่ค่าไม่ลงตัว ส่วนการคำนวณทางการเงิน decimal เป็นทางเลือกที่ดีที่สุด เพราะว่าเราสามารถหลีกเลี่ยงปัญหา rounding errors ได้

4. ข้อความ The string Type

          String เป็นกลุ่มของ Char ที่เรียงต่อกันเป็นข้อความ ตัวอักษรบางตัวพิมพ์ออกหน้าจอไม่ได้ แต่เรายังต้องการใช้มัน เพราะฉะนั้นในภาษา C# จึงมีกรณีพิเศษเมื่อต้องการใช้อักษรเหล่่านั้นโดยการใช้เครื่องหมาย '\'

Escape SequenceMeaning
\'Single Quote
\"Double Quote
\\Backslash
\0Null, not the same as the C# null value
\aBell
\bBackspace
\fform Feed
\nNewline
\rCarriage Return
\tHorizontal Tab
\vVertical Tab

ตัวอย่างที่ 3 การประกาศตัวแปร string และการใช้งานเบื้องต้น

          โปรแกรมจะแสดงชื่อและนามสกุลตามที่ประไว้ในตัวแปรชื่อ firstName และ lastName จากนั้นโปรแกรมจะรับชื่อและนามสกุลใหม่อีกครั้งและแสดงชื่อนามสกุลใหม่

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string firstName = "John";
            string lastName = "Doe";

            Console.WriteLine("Name: " + firstName + " " + lastName);

            Console.WriteLine("Please enter a new first name:");
            firstName = Console.ReadLine();

            Console.WriteLine("New name: " + firstName + " " + lastName);

            Console.ReadLine();
        }
    }
}

5. ตัวดำเนินการ C# Operators

         เครื่องหมายในการคำนวณทางคณิตศาสตร์ต่างๆ ทั้งบวก ลบ คูณ หาร ตรรกะ ซึ่งจะต้องใช้ร่วมกับตัวแปรเพื่อหาผลลัพธ์ของสมการซึ่งแสดงตามตารางด้านล่างนี้แล้ว

Category (by precedence)Operator(s)Associativity
Primaryx.y  f(x)  a[x]  x++  x--  new  typeof  default  checked  unchecked delegateleft
Unary+  -  !  ~  ++x  --x  (T)xright
Multiplicative*  /  %left
Additive+  -left
Shift<<  >>left
Relational<  >  <=  >=  is asleft
Equality==  !=right
Logical AND&left
Logical XOR^left
Logical OR|left
Conditional AND&&left
Conditional OR||left
Null Coalescing??left
Ternary?:right
Assignment=  *=  /=  %=  +=  -=  <<=  >>=  &=  ^=  |=  =>right

ตัวอย่างโปรแกรมการใช้ operators ต่างๆ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;

class Unary
{
    public static void Main()
    {
        int unary = 0;
        int preIncrement;
        int preDecrement;
        int postIncrement;
        int postDecrement;
        int positive;
        int negative;
        sbyte bitNot;
        bool logNot;

        preIncrement = ++unary;
        Console.WriteLine("pre-Increment: {0}", preIncrement);

        preDecrement = --unary;
        Console.WriteLine("pre-Decrement: {0}", preDecrement);

        postDecrement = unary--;
        Console.WriteLine("Post-Decrement: {0}", postDecrement);

        postIncrement = unary++;
        Console.WriteLine("Post-Increment: {0}", postIncrement);

        Console.WriteLine("Final Value of Unary: {0}", unary);

        positive = -postIncrement;
        Console.WriteLine("Positive: {0}", positive);

        negative = +postIncrement;
        Console.WriteLine("Negative: {0}", negative);

        bitNot = 0;
        bitNot = (sbyte)(~bitNot);
        Console.WriteLine("Bitwise Not: {0}", bitNot);

        logNot = false;
        logNot = !logNot;
        Console.WriteLine("Logical Not: {0}", logNot);
    }
}

อธิบายโปรแกรม 

17    preIncrement = ++unary;
 ++unary  หมายถึง เพิ่มค่าในตัว unary ขึ้น 1 ก่อน แล้วจึงจะส่งค่าไปให้ preIncrement ดังนั้น preIncrement = 1

 20   preDecrement = --unary; 
--unary เหมือนบรรทัดที่ 17 แต่เป็นการลดค่าลง ดังนั้น preDecrement จึ่งเท่ากับ 0

23    postDecrement = unary--;
unary-- คือ ส่งค่าไปยัง preIncrement ก่อน แล้วจึงลดค่าลง 1 ทีหลัง ดังนั้น preIncrement = 0

26    postIncrement = unary++;
unary++ เหมือนกับบรรทัดที่ 23 แต่เป็นการเพิ่มค่าขึ้น 1

31        positive = -postIncrement;
32        Console.WriteLine("Positive: {0}", positive);
33
34        negative = +postIncrement;
35        Console.WriteLine("Negative: {0}", negative);
ส่วนนี้เป็นเหมือนกันคำนวณทางคณิตศาสตร์นั้นคือ ค่าลบ * ลบ = ค่าบวก, ค่าบวก*ลบ=ลบ
ซึ่งในบรรทัด 31 postIncrement = -1 ;  -(-1) = 1
และบรรทัด 34   postIncrement = -1 ;  +(-1) = -1

37       bitNot = 0;
38       bitNot = (sbyte)(~bitNot);
39       Console.WriteLine("Bitwise Not: {0}", bitNot);
บรรทัดที่ 38 (~bitNot) คือการกลับบิต จาก "00000000" = 0 เป็น "111111111" = -1

41      logNot = false;
42      logNot = !logNot;
43      Console.WriteLine("Logical Not: {0}", logNot);
บรรทัดที่ 42 !logNot คือการ NOT ทางตรรกะศาสตร์ คือการเปลี่ยนเป็นตรงข้ามคือ false -> true

ผลลัพธ์ที่ได้

pre-Increment: 1
pre-Decrement 0
Post-Decrement: 0
Post-Increment: -1
Final Value of Unary: 0
Positive: 1
Negative: -1
Bitwise Not: -1
Logical Not: true 


ตัวอย่างสุดท้าย

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;

class Binary
{
    public static void Main()
    {
        int x, y, result;
        float floatresult;

        x = 7;
        y = 5;

        result = x+y;    // 7 + 5 = 12
        Console.WriteLine("x+y: {0}", result);

        result = x-y;    // 7 - 5 = 2
        Console.WriteLine("x-y: {0}", result);

        result = x*y;    // 7 * 5 = 35
        Console.WriteLine("x*y: {0}", result);

        result = x/y;     // 7 / 5 = 1 เพราะเป็นจำนวนเต็มหารจำนวนเต็ม = จำนวนเต็ม
        Console.WriteLine("x/y: {0}", result);

        floatresult = (float)x/(float)y;  // 7 / 5 = 1.4
        Console.WriteLine("x/y: {0}", floatresult);

        result = x%y;    // 7 % 5 = 2 เป็นการหารแล้วเอาเศษ 7 / 5 = 1 เศษ 2
        Console.WriteLine("x%y: {0}", result);

        result += x;    //หมายถึง result = result + x ;ดังนั้นจะได้ result = 2 + 7 = 9
        Console.WriteLine("result+=x: {0}", result);
    }
}

ผลลัพธ์ที่ได้

x+y: 12
x-y: 2
x*y: 35
x/y: 1
x/y: 1.4
x%y: 2
result+=x: 9