---
# System prepended metadata

title: 民國111.11.03 C#
tags: [課程111ERP02]

---

---
tags: 課程111ERP02
---
# 民國111.11.03 C#
```
   private void button17_Click(object sender, EventArgs e)
        {
            const double PI = 3.14;    //constant  常數  恆常不變之數
           //  PI = 3.14159;
            MessageBox.Show("PI=" + PI);
            double RATE = 0.05;
            RATE = 0.07;
            MessageBox.Show("RATE=" + RATE);

        }
```

//整體變數:變數宣告在程式範圍之外, 可以多個程式共用

```
double PI = 3.14; 
private void button17_Click(object sender, EventArgs e)
        {          
            MessageBox.Show("PI=" + PI);          
        }
```


注意!! C#的輸出都要是"字串"型態
//數值字串轉整數
//整數轉字串
```
   private void button1_Click(object sender, EventArgs e)
        {
            int n1, n2, n3;
            n1 = Convert.ToInt32(textBox1.Text);
            n2 =  int.Parse  (textBox2.Text);       
            n3 = n1 + n2;
            MessageBox.Show("n3="+n3.ToString());
            MessageBox.Show("n3+1="+Convert.ToString(n3 + 1));
            MessageBox.Show(5.ToString());
            MessageBox.Show(Convert.ToString(55));
        }
```

```
  private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("AAA" + "\t" + "BBB" + "\t" + "CCC"+"\n"+
                                             "DDD" + "\t" + "EEE" + "\t" + "FFF"   );
        }
```

數值轉字串的方法
1.  數值.ToString()
2.  Convert.ToString(數值)

字串轉數值的方法
1. Convert.ToInt32(字串)
2.  int.Parse  (字串);

////////////////////////////////////////////////////////////////////////////////////////////////////////

C# 物件使用的規則
1.
物件.屬性       //  textBox1.Text;
object.property

例如:
我.性別
我.血型

2.
物件.方法       //  number.ToString();
object.method()
例如:
我.呼吸()
我.走()

3.
物件.屬性.方法   //  textBox1.Text.ToString();
object.property.method()
例如:
我.手.移動()
 
C# 編輯器這部分會有接龍的輔助

 方法 method=函數  function         

/  slash  斜線

\  back slash    倒斜線

// object 資料型態
//對資料型態的容忍度最大
```
private void button4_Click(object sender, EventArgs e)
        {
           object  n,d,b,c,s,t;
           double sum;
            n = 1;
            d = 3.14;
            b = true;
            c = 'A';
            s = "abc";
            t = c.ToString() + s;
            sum = (int)n + (double)d;    
       //  sum =Convert.ToInt32(n)+ Convert.ToDouble(d);
            MessageBox.Show(sum.ToString());
        }
```

//背景知識: C語言誕生於AT&T Bell Labs ,天生擅長通訊應用
ASCII（發音：英語發音：，American Standard Code for Information Interchange，美國資訊交換標準代碼）
//ASCII 是:字元和編號的關係

字元的16進位表示法
x  代表 HEX  16進位

```
   private void button1_Click(object sender, EventArgs e)
        {
            char c1, c2;
            c1='\x0041';  //A
            MessageBox.Show(c1.ToString());
            c2 = '\x0061';  //a
            MessageBox.Show(c2.ToString());
        }
```

字元   和  內碼  之間  存在互相轉換的機制
(C primer 語言的特色)
轉型 (cast)  :  
(int)       字元轉型成整數
(char)    整數轉型成字元

數值= (int)     字元
字元= (char)  數值

A   a    差32     a-A=97-65=32

```
private void button4_Click(object sender, EventArgs e)
{   //浮點數取整數部分
    double d = 3.55;
    int n = (int)  d;
    MessageBox.Show(n.ToString());  //3
}
```




 ```
private void button2_Click(object sender, EventArgs e)
    {
        int num1,num2,num3;
        num1 = (int) 'A';   //65
        MessageBox.Show(num1.ToString());

        num2 = (int) '\x0042';   //B
        MessageBox.Show(num2.ToString());  //66

        num3 = (int)'a';   //97
        MessageBox.Show("a-A="+(num3-num1).ToString());              //32
        MessageBox.Show("a-A=(hex)" +   Convert.ToString(  (num3 - num1),16));   //20

        char c1;
        c1 = (char)65;
        MessageBox.Show(c1.ToString());    //A

        MessageBox.Show("65->Hex="+ 65.ToString("X"));  //41
    }
```


//作業: 了解下列浮點數的轉型
 ```
 private void button2_Click(object sender, EventArgs e)
        {
            int n;
            double d = 3.14;
            n = (int) d;
            MessageBox.Show("n="+n);  //3
        }
```

//使用Convert.ToString()輸出下列進位: 16,  2,  8
```
 private void button3_Click(object sender, EventArgs e)
        {
            MessageBox.Show(Convert.ToString(255, 16).ToUpper());     // 255-->FF
             MessageBox.Show(Convert.ToString(255, 16).ToLower());     // 255-->ff
             MessageBox.Show(Convert.ToString(255, 2));                          //  255-->1111 1111
            MessageBox.Show(Convert.ToString(255, 8));                           //  255-->377
            MessageBox.Show(12345.ToString("e"));                                   //1.2345e4
        }
```

//** for loop 語法   chap 3-14
**表示要背語法  接龍輔助不足
```
  private void button4_Click(object sender, EventArgs e)
        {
            for (int i = 1 ; i <= 10 ; i++)
            {
                MessageBox.Show(i.ToString());           
            }

            label1.Text = "";
            for (int i = 1; i <= 10; i++)  { 
                 label1.Text += (i.ToString()) +", ";     
            }     //節省一行空間
        }
```

```
   private void button5_Click(object sender, EventArgs e)
        {
            int s = 0;     //sum
            for (int i = 1; i <= 10; i++)
            {
                MessageBox.Show(i.ToString());
                s = s + i;
            }
          MessageBox.Show(s.ToString()  );    //s=55        
        }
```

作業:
1.求1~100 的總和(1+2+3+...+100)	//5050
2.求1~100 的奇數和(1+3+5+...+99)      	//2500
3.求1~100 的偶數和(2+4+6+...+100)   	//2550

//參考解答:
```
private void button1_Click(object sender, EventArgs e)
        {
            int s = 0;     //sum
            for (int i = 2; i <= 100; i=i+2)
            {               
                s = s + i;
            }
            MessageBox.Show(s.ToString());    //s=2550
        }
```

// 字元編號轉字元
```
  private void button5_Click(object sender, EventArgs e)
        {
             char c1, c2;
             for (int i = 65; i <= 90; i++)   //i=i+1
            {
                c1 = (char)i;  //A
                c2 = (char)(i + 32);  //a
                MessageBox.Show(c1.ToString() + " " + c2.ToString());   // 列印   A~Z ,   a~z
            }
        }
```

// 列印   A~Z ,   a~z 的16進位
```
  private void button8_Click(object sender, EventArgs e)
        {
            string c1, c2, c3;
            char c;
            for (int i = 65; i <= 90; i++)   //i=i+1
            {
                c = (char) i;
                c1 = Convert.ToString(i, 16);
                c2 = i.ToString("x");
                c3 = Convert.ToString((i + 32), 16);
                MessageBox.Show(c + ":" + c1 + " " + c2 + " " + c3);   // 列印   A~Z ,   a~z 的16進位
            }
            }
        }
```

//add label1.Text  in Form1  to show whole A~Z string instead of using MessageBox.Show()
```
    private void button5_Click(object sender, EventArgs e)
        {
            char c1, c2;
            label1.Text = "";
            for (int i = 65; i <= 90; i++)   //i=i+1
            {
                c1 = (char)i;  //A
                c2 = (char)(i + 32);  //a
                MessageBox.Show(c1.ToString() + " " + c2.ToString());
                label1.Text = label1.Text + c1.ToString() + " " + c2.ToString() + "\n";
            }
        }
```

2022-11-02
//richTextBox(豐富文字盒) 是很好的輸出工具, 可以保留輸出的結果(追蹤), 是TextBox的哥哥, 功能強大  
//add richTextBox1.Text  in Form1  to show whole string +"\t"
```
     private void button5_Click(object sender, EventArgs e)
        {
            char c1, c2;
            richTextBox1.Text = "";
            for (int i = 65; i <= 90; i++)   //i=i+1
            {
                c1 = (char)i;  //A
                c2 = (char)(i + 32);  //a
                MessageBox.Show(c1.ToString() + " " + c2.ToString());
                richTextBox1.Text = richTextBox1.Text + c1.ToString() + "\t" + c2.ToString() + "\n";
            }
        }
```
//////////////////////////////////////////////////////////////////////////////////////////
// 作業0:  顯示1~100,  輸出到richTextBox
// 作業1:  顯示A--Z的  字元,  十進位,   16進位,  2進位,  輸出到richTextBox
// 作業2:  顯示ASCII的  字元,  十進位,   16進位,  2進位(參考維基百科格式) ,  輸出到richTextBox
//              ASCII(編號0--31字元)屬於控制字元,不可顯示

//參考解答:作業0
```
 private void button1_Click(object sender, EventArgs e)
        {            
            for (int i = 1; i <= 100; i++) 
            {
                richTextBox1.Text = richTextBox1.Text + i.ToString() + "\t" ;
                if (i % 10 == 0)  {
                    richTextBox1.Text += "\n";
                }
            }
        }
```

//參考解答
```
 private void button2_Click(object sender, EventArgs e)
        {
            char c1;
            for (int i = 65; i <= 90; i++)   //i=i+1
            {
                c1 = (char)i;  //A
                richTextBox1.Text +=(c1.ToString() + "\t " + i.ToString() + "\t" + Convert.ToString(i, 16) + "\t" + Convert.ToString(i, 2))+"\n";
            }
        }
```

//參考解答
```
      private void button1_Click(object sender, EventArgs e)
        {
            char c1;
            string s;
            for (int i = 65; i <= 90; i++)   
            {
                c1 = (char)i;  //A
                s = c1.ToString() + "\t" + i.ToString() + "\t" + Convert.ToString(i, 16) + "\t" + Convert.ToString(i, 2) + "\n";
                richTextBox1.Text = richTextBox1.Text + s;
            }
        }
```

//unicode
```
     private void button7_Click(object sender, EventArgs e)
        {
            char c1, c2,c3;
            c1 = '\u0041';
            c2 = '\x0041';
            c3 = '\u6f22';
            MessageBox.Show(c1.ToString());   //A
            MessageBox.Show(c2.ToString());   //A
            MessageBox.Show(c3.ToString());  //漢

            //sizeof()回傳變數型態的大小
            MessageBox.Show(sizeof(char).ToString());   //2
            MessageBox.Show(sizeof(int).ToString());   //4
            MessageBox.Show(sizeof(double).ToString());   //8
            MessageBox.Show(sizeof(decimal).ToString());   //16
            // MessageBox.Show(sizeof(string).ToString());   //na

            MessageBox.Show( c1.GetType().ToString() );   //system.char  ,GetType()回傳變數型態
          }
```

//作業: 用unicode(統一碼, 世界碼, 萬國碼)顯示"中華民國"
```
          {  //用編號查字
             char a1,a2,a3,a4;
            a1 ='\u4e2d'; //中   // '\u4e2d'=4*4096+14*256+2*16+13*1=20013 (decimal)
            a2 ='\u83ef'; //華
            a3 ='\u6c11'; //民
            a4 ='\u570b'; //國
            MessageBox.Show(a1.ToString()+a2.ToString()+a3.ToString()+a4.ToString());

            //用字查編號
            int n1,n2;
            n1=(int) '中';
            n2=(int) '華';
            MessageBox.Show(Convert.ToString(n1, 16).ToUpper() + " " + Convert.ToString(n2, 16).ToUpper());
            MessageBox.Show(Convert.ToString(n1));     //20013
        }
```

//C# 二進位制及轉換說明
//C# 二進位: 使用 0b開頭  (b B都可以, _用來分組, 方便閱讀)
```
        private void button2_Click(object sender, EventArgs e)
        {
            char c1, c2, c3, c4;
            c1 =(char) 0b0100_0001;  //A
            c2 =(char) 0B0100_0010;  //B
            c3 =(char) 0b0011_0001;  //1
            c4 =(char) 0B0011_0010;  //2
            MessageBox.Show(c1.ToString() + c2.ToString() + c3.ToString() + c4.ToString());  //AB12
        }
```

//richTextBox是非常重要的輸出元件, 要熟練它的排版
//  定位點( \t)    換行(\n)    的範例
//  定位點:	協助欄位的對齊

```
   private void button7_Click(object sender, EventArgs e)
        {
            string s1="A", s2="B",s3="C", s4="AA",s5="BB",s6="CC";
            richTextBox1.Text = "";
            richTextBox1.Text = richTextBox1.Text + s1 + "\t " + s2 +"\t"+s3+ "\n";
            richTextBox1.Text = richTextBox1.Text + s4 + "\t " + s5 +"\t"+s6+ "\n";           
        }
```



// 作業1: 用unicode(萬國碼)顯示編號20013(中)字碼
               開始的256個unicode字元及其Hex編號  用richTextBox 顯示
               每列(row)8個字, 共32列
//提示:   使用內外2個for迴圈來做(外圈轉32次 內圈轉8次)  
```
   private void button3_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "";
            char c1;
            int n=20013;
            for (int k = 1; k <= 32; k++)
            {
                   for (int i = 1; i <= 8; i++)   //i=i+1
                   {
                       c1 =(char) n;   ;
                       richTextBox1.Text = richTextBox1.Text + n.ToString("X") + "=" + c1.ToString()+"\t" ;
                       n=n+1;
                   }
                  richTextBox1.Text = richTextBox1.Text + "\n";
            }         
        }
```

//心得: 寫程式遵守(IPO): 輸入(Input)->處理(Process)->輸出(Output 到richTextBox) 就對了
//以上是寫程式的"降龍十八掌"
//延伸作業:列印日文50音(平假名 範圍:3040 ~309F  ,字符總數:96)
```
private void button7_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "";
            char c1='\u3040', c2 = '\u309F';
            int n1 = (int) c1;
            int n2= (int) c2;
            for ( int i=n1; i <= n2; i++)  {
                    char c = (char)i ;
                    richTextBox1.Text += c+"\n";                    
             }                            
        }
```
// 作業2:顯示ASCII編號0~255個字碼   //0~ 255   共256個字元
               共256個字元及其Hex編號  用richTextBox 顯示
               每列8個字, 共32列 
// ASCII編號0~31個字碼, 屬於控制字元(Control Character), 列印時會跑版是正常現象

    private void button4_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "";
            char c1;
            int n = 0;
            for (int k = 1; k <= 32; k++)
            {
                for (int i = 1; i <= 8; i++)   //i=i+1
                {
                    c1 = (char)n; ;
                    richTextBox1.Text = richTextBox1.Text + n.ToString("X") + "=" + c1.ToString() + "\t";
                    n = n + 1;
                }
                richTextBox1.Text = richTextBox1.Text + "\n";
            }
        }


//三元運算子(Tenary operator)**
// 括號()  問號?  冒號:
//( if else 的簡化版)
```
   private void button1_Click(object sender, EventArgs e)
        {
            int a, b,max;
            a = Convert.ToInt32(textBox1.Text);
            b = Convert.ToInt32(textBox2.Text);
          //  b = int.Parse(textBox2.Text);
            max = (a > b) ? a : b;
            MessageBox.Show("max="+max.ToString());
        }
```

```
private void button6_Click(object sender, EventArgs e)
        {
            int max;
            max = (2 > 1) ? 2 : 1;     
            // ?  :  	    是 "運算子"   , 使用2個 "運算子" , 運算,   3個 "運算元"             
            //(2 > 1)    2    1  是 "運算元",  > 是關係運算子
            //(關係運算式) 的結果是邏輯值: true , false
            MessageBox.Show("max=" + max.ToString());  //2
        }
```

運算子   	operator    + - * /
運算元   	operand     a, b, 1, 2, ....
運算式	expression      e.g. max= a+b

// if else  3-2  **
```
   private void button2_Click(object sender, EventArgs e)
        {
            int a, b, max;
            a = Convert.ToInt32(textBox1.Text);
            b = Convert.ToInt32(textBox2.Text);
            if (a > b)              
               { 
                 max = a;
               }
            else
            {
                max = b;
            }
            MessageBox.Show("max=" + max.ToString());
        }
```

作業: 如果天氣是下雨,則"撐傘"  否則"戴帽子"  
1.使用三元運算子的語法,  做判斷
2.使用if else的語法,  做判斷

參考解答:
```
  private void button2_Click(object sender, EventArgs e)
        {
            string 天氣, act;
            天氣 = textBox1.Text;
            if (天氣 == "下雨")
            {
                act = "撐傘";
            }
            else
            {
                act = "戴帽子";
            }
            MessageBox.Show("act=" + act);
        }
```

注意!
C語言的等於, 是 "=="  ,  equal
C語言的 "=" 是 "設定"的意思 (assign)
C語言的不等於, 是 "!="  , not  equal

```
private void button3_Click(object sender, EventArgs e)
        {
            if (1 ==1 )
                MessageBox.Show("1==1");  //1==1
        }
```

補充:三元運算子也可以做成更複雜的巢狀結構如下, 但是要小心分析
```
private void button2_Click(object sender, EventArgs e)
        {
            int max;
            max = (3 >1) ?  (  (3>2)? 3:2  )    : 1;            
            MessageBox.Show("max=" + max.ToString());  //3
        }
```

結論:三元運算子最適合取代簡單版的if else , 程式變得簡潔
//C語言理念:用運算式(expression)取代敘述(statement)
//數學 取代 句子
//2-11
//  除法(注意: C語言的除法大有玄機)
//注意:
//1. C語言的除法(被除數和除數之一要使用浮點數) 結果才會正確(有小數部分)
//2. C語言的整數除法(被除數和除數都是整數)結果是取商數的整數部分

% 整數除法求餘數 [餘數的值域:  0<=餘數<除數]
//本題求職考試經常出現

```
   private void button3_Click(object sender, EventArgs e)
        {
            double a, b, c;
            a = 5 / 3;    //1
            MessageBox.Show("a=" + a.ToString());
            b = 5 / 3.0;  //1.66666666
            MessageBox.Show("b=" + b.ToString());
            c = 5 % 3;    //2  remainder
            MessageBox.Show("c=" + c.ToString());
        }
```

```
private void button5_Click(object sender, EventArgs e)
        {
            for (int i = 1; i <= 10; i++)  {
                if (i % 2 == 0)   // 本例輸出偶數 2 4 6 8 10
                    MessageBox.Show(i.ToString());            
            }
        }
```

 ```
private void button5_Click(object sender, EventArgs e)
        {
            for (int i = 1; i <= 10; i++)  {
                if (i % 2 != 0)   // 本例輸出奇數 1 3 5 7 9
                    MessageBox.Show(i.ToString());            
            }
        }
```
////////////////////////////////////////////////////////////////
 private void button4_Click(object sender, EventArgs e)
        {
            bool b1, b2;
            string s1, s2;

            b1 = true;   //真
            b2 = false;  //假

            s1 = (b1) ? "true" : "false";
            MessageBox.Show(s1);      //true

            s2 = (b2) ? "true" : "false";
            MessageBox.Show(s2);      //false

        }

//作業1
```
 private void button4_Click(object sender, EventArgs e)
        {
            bool b1, b2;
            string s1, s2;

            b1 = true;
            b2 = false;

            s1 = (b1) ? "真的喔" : "假的喔";
            MessageBox.Show(s1);

            s2 = (b2) ? "真的喔" : "假的喔";
            MessageBox.Show(s2);
        }
```

//作業2
```
   private void button5_Click(object sender, EventArgs e)
        {
            bool b1, b2;
            string s1, s2;

            b1 = true;  
            b2 = false;

            s1 = (!b1) ? "真的喔" : "假的喔";
            MessageBox.Show(s1);        //假的喔

            s2 = (!b2)? "真的喔" : "假的喔";
            MessageBox.Show(s2);        //"真的喔
        }
```

//作業3: 把1~10 輸出到richTextBox  註明 "奇數" , "偶數" 
//使用 % 做運算 (可以被2整除:偶數 , 不可以被2整除:奇數 )
1:奇數
2:偶數
3:奇數
4:偶數
```
        private void button7_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "";
            for (int i = 1; i <= 10; i++)
            {
                richTextBox1.Text = richTextBox1.Text + i.ToString();
                if (i % 2 == 0)
                    richTextBox1.Text = richTextBox1.Text + ":偶數" + "\n";                
                else
                    richTextBox1.Text = richTextBox1.Text + ":奇數" + "\n";           
            }
       }
```
  
2022-11-03
//if (關係運算式) , 會,  產生邏輯值{ true , false}
```
  private void button1_Click(object sender, EventArgs e)
        {
            if (true)
            {
               MessageBox.Show("我是真的"); 
            }

            if (false)
            { MessageBox.Show("我是假的"); }    //永遠不執行
            else
            { MessageBox.Show("我是假的"); }  
        }
```

//   ==   equal  
//   !=    not equal
//   a=1   assign
// (關係運算式) 的結果是邏輯值 {true, false}
//以下是 == ,  !=  的練習
```
   private void button7_Click(object sender, EventArgs e)
        {
            int a = b = 1, c = 2;
            if (a == b)
            { MessageBox.Show("a == b"); }
            if (a != c)
            { MessageBox.Show("a != c"); }
    
        }
```

//作業: 把上例改用三元運算子來做    
//注意! 簡單的if else 經常改用 三元運算子 來表示, 以縮短程式的長度
//心得: (關係運算式) 的結果  會產生邏輯值  \{true, false\}
運算邏輯值的"運算子"  稱為"邏輯運算子"  \{&& ,  || ,  ! , ^  \}

//邏輯運算子: && (And)   ,     || (Or)  ,   ! (Not),  
\------------------------------------------------------
^(XOR)   //eXclusive OR  (互斥或)        
      true  ^  true   = false
      true  ^  false  = true
      false ^  true   = true
      false ^  false  = false
\------------------------------------------------------
      
//邏輯運算子, 用來運算, 邏輯值 {  true , false }
```
 private void button3_Click(object sender, EventArgs e)
        {      
            MessageBox.Show("true && true =" + (true && true) );   //true
            MessageBox.Show("true && false =" + (true && false));   //false
            MessageBox.Show("false && true =" + (false && true));   //false
            MessageBox.Show("false && false =" + (false && false));   //false

            MessageBox.Show("true || true =" + (true || true));   //true
            MessageBox.Show("true || false =" + (true || false));   //true
            MessageBox.Show("false || true =" + (false || true));   //true
            MessageBox.Show("false || false =" + (false || false));   //false

            MessageBox.Show("true ^ true =" + (true  ^ true));   //false
            MessageBox.Show("true ^ false =" + (true ^ false));   //true
            MessageBox.Show("false ^ true =" + (false ^ true));   //true
            MessageBox.Show("false ^ false =" + (false ^ false));   //false
                                    
            MessageBox.Show("true=" + true);   //true
            MessageBox.Show("!true=" + !true);   //false
        }
```

//作業: 使用程式做出課本 2-12下方表格的s真值表(truth table) 輸出到richTextBox
//格式自訂

// 轉型 (cast)  的範例
// 轉型 (cast) 僅限用於數值型態的資料 + char
// C語言的 int , char 雖然資料型態不同, 但是可以互轉
// (int) char_var      (char) int_var
//大的數值轉小的數值 會喪失高位元部分
```
   private void button4_Click(object sender, EventArgs e)
        {
            int n = (int) 3.54;       //C語言取整數部分的方法
            
            MessageBox.Show("n="+n.ToString());     //3    小數喪失

            double d1,d2;
            d1=5 /3;                                     //1
            d2= (double) 5 /3;                    //1.6666666666 

            MessageBox.Show("d1="+d1.ToString());    //1
            MessageBox.Show("d2="+d2.ToString());   // 1.66666666

            ushort u = 65534;  // FF FE     2 byte
            byte b;                     //               1 byte
            b = (byte) u;   //大腳穿小鞋, 要穿進去: 以鞋跟(小數點)為基準,  前面去掉  (削足適履 , 裹小腳 ) , 喪失高位元部分
            MessageBox.Show("b=" + b+" HEX="+b.ToString("x").ToUpper());   //FE=254    

            ushort u1 = 0b11111111_11111110;  // FF FE     2 byte
            byte b1;                     //               1 byte
            b1 = (byte)u1;   //大腳穿小鞋, 要穿進去: 以鞋跟(小數點)為基準,  前面去掉  (削足適履 , 裹小腳 ) , 喪失高位元部分
            MessageBox.Show("b1=" + b1 + " 二進位=" + Convert.ToString( b1,2));   //FE=1111_1110  
        }
```

//重點整理
//C 語言的not 有 2 種符號 :  !  ,  ~
1.  !
// !   not 的用法    
// !=   not equal     (!用於關係運算  例如: 1 != 2   vs  1==1  )
// !true , !false         (!用於邏輯運算 例如:  !true  , !false )

2.  ~
// ~  not  :  bit  reverse    (用於位元運算)
// ~用於位元運算
//chap 2-13頁

//2-13頁
//位元運算子   &(And) ,  |(Or) ,  ^( Xor  ) , ~ (Not)
^ ( Xor )   eXclusive OR :  (0,1)組合為true  其餘組合為false : (0,0)  (1,1)

```
   private void button6_Click(object sender, EventArgs e)
        {//2-13頁
            int n;
            n = 5 & 3;   //1
            MessageBox.Show(n.ToString());

            n = 5 | 3;     // 7
            MessageBox.Show(n.ToString());

            n = 5 ^ 3;    //6    XOR
            MessageBox.Show(n.ToString());

            n = ~5 ;    //-6
            MessageBox.Show(n.ToString());

            n = 5 + ~5;    //-1
            MessageBox.Show(n.ToString());
        }
```

///////////////////////////////////
+5         0101
~5         1010    是個負數  但是負多少 ? 

公式: 要對1010求2的補數:

1's       0101
            +    1        
---------------
2's       0110       ---> 6

所以1010是-6


1's complement    1的補數   1->0   0->1
2's complement    2的補數=  1的補數 +1

//  +5   -5   ~5
```
  private void button9_Click(object sender, EventArgs e)
        {
            sbyte n1, n2, n3, n4;
            n1 = +5;       //0101
            n2 = -5;         //1011
            n3 = ~5;       //1010
            n4 = ~-5;     //0100    是10進位的4  
            MessageBox.Show("+5=" + Convert.ToString(n1, 2) + ", -5=" + Convert.ToString(n2, 2) +
                                          ", ~5=" + Convert.ToString(n3, 2) + ", ~-5=" + Convert.ToString(n4,2));

            MessageBox.Show( "~5=" + Convert.ToString(~5) +  ", ~-6=" + Convert.ToString(~-6));
        }
```

~ 運算子又被稱為取補數，比較常見的例子是 ~1 = –2，也就是 1的補數是-2 ，
補數也許有點難理解，可以直接記成它會把運算元的每一個位元反轉，也就是把1變成0，把0變成1，
根據研究後的結果，其實補數的計算方法, 就是把原來的數x加1,  (x+1) , 前面再加一個負號 -(x+1) , 就可以速算答案了
例如: 2 的補數為 -(2+1) 是 - 3，3 的補數為 -4，以此類推。
///////////////////////////////////////////////
//移位運算子 (shift)
```
  private void button7_Click(object sender, EventArgs e)
        {
           byte a, b;
            a = 20 >> 1;     //10
            b = 20 << 1;    //40
            MessageBox.Show(a.ToString());   //10
            MessageBox.Show(b.ToString());   //40
            MessageBox.Show("20=" + Convert.ToString(20, 2) + ", 20>>1=" + Convert.ToString(a, 2)  + ", 20<<1=" + Convert.ToString(b, 2));
        }
```


//複合指定運算子  2-14頁
//優點:程式更精簡
```
 private void button8_Click(object sender, EventArgs e)
        {
            int a = 2, b = 2,c=2;
            a = a + 1; 
            MessageBox.Show("a="+a.ToString());    //3

            b += 1;     //複合指定運算子   b +1 後   再指定 給b
            MessageBox.Show("b="+b.ToString());    //3

            c *= 2;  // c=c*2
            MessageBox.Show("c=" + c.ToString());    //4
        }
```

// i++獨立存在, , 後遞增, 前遞增, 結果相同(i++ ,  ++i)
```
  private void button12_Click(object sender, EventArgs e)
        {
            int i1=1, i2=1;
            i1++;
            MessageBox.Show("i1="+ i1);  //2
            ++i2;
            MessageBox.Show("i2="+ i2);  //2
        }
```

// i++放在運算式, 要考慮到前遞增 或後遞增,, "結果會不同"
//本題是C語言的陷阱   
```
  private void button9_Click(object sender, EventArgs e)
        {
            int i = 10, k;
//         i++;    //i=i+1;
            k = i++;     // 後遞增   k=10?  k=11?
            MessageBox.Show("k="+k.ToString());  //k=10
            MessageBox.Show("i="+i.ToString());    //i=11
        }
```

```
 private void button10_Click(object sender, EventArgs e)
        {
            int i = 10, k;
            k = ++i;              // 前遞增
            MessageBox.Show("k=" + k.ToString());   //k=11
            MessageBox.Show("i=" + i.ToString());     //i=11
        }
```

//遞增變數i 都會+1

//下列例子很燒腦, 危機潛藏, 應該避免
```
 private void button11_Click(object sender, EventArgs e)
        {
            int i ,j, k;
            i =10; j =  10;

            k = ++i*5;     //k=55 ,  i=11
            j = k++ * 2;   // ++在前  優先處理   ;;; ++在後  殿後處理  j=55*2=110   k=55+1=56
            MessageBox.Show("i=" + i.ToString());   //11
            MessageBox.Show("j=" + j.ToString());   //110
            MessageBox.Show("k=" + k.ToString());   //56

        }
```

作業: 用你的方法, 簡化這支程式, 維持結果的正確性, 但是不會讓人誤解
提示: 使用獨立的運算式  i++ , k++  
```
      private void button15_Click(object sender, EventArgs e)
        {
            int i, j, k;
            i = j = 10;
            /*
            k = ++i * 5;
            j = k++ * 2;   // ++在前  優先處理   ;;; ++在後  殿後處理
            */

            ++i;
            k = i * 5;
            j = k * 2;
            k++;

            MessageBox.Show("i=" + i.ToString());   //11
            MessageBox.Show("j=" + j.ToString());   //110
            MessageBox.Show("k=" + k.ToString());   //56
        }
```

C語言的注釋(Comment, Remarks)有下列2種:

//單行注釋  , 單列注釋

/*
多行注釋
多列注釋
多列注釋
*/

行列不分的由來是什麼?








