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