--- 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種: //單行注釋 , 單列注釋 /* 多行注釋 多列注釋 多列注釋 */ 行列不分的由來是什麼?