switch[交換機]

switch[交換機]

Switch是交換機,它的前身是網橋。SWITCH速度比HUB快,這是由於HUB不知道目標地址在何處,傳送數據到所有的連線埠。交換機是使用硬體來完成以往網橋使用軟體來完成過濾、學習和轉發過程的任務。SWITCH中有一張轉發表,如果知道目標地址在何處,就把數據傳送到指定地點,如果它不知道就傳送到所有的連線埠。這樣過濾可以幫助降低整個網路的數據傳輸量,提高效率。以switch命名的還有動畫以及漫畫作品。

基本信息

專業術語

交換機

switchswitch
當然交換機的功能還不止如此,它可以把網路拆解成網路分支、分割網路數據流,隔離分支中發生的故障,這樣就可以減少每個網路分支的數據信息流量而使每個網路更有效,提高整個網路效率。目前有使用SWITCH代替HUB的趨勢。

在計算機網路系統中,交換概念的提出改進了共享工作模式。而HUB集線器就是一種共享設備,HUB本身不能識別目的地址,當同一區域網路內的A主機給B主機傳輸數據時,數據包在以HUB為架構的網路上是以廣播方式傳輸的,由每一台終端通過驗證數據包頭的地址信息來確定是否接收。也就是說,在這種工作方式下,同一時刻網路上只能傳輸一組數據幀的通訊,如果發生碰撞還得重試。這種方式就是共享網路頻寬。通俗的說,普通交換機是不帶管理功能的,一根進線,其他接口接到電腦上就可以了。

工作在數據鏈路層,交換機擁有一條很高頻寬的背部匯流排和內部交換矩陣。交換機的所有的連線埠都掛接在這條背部匯流排上,控制電路收到數據包以後,處理連線埠會查找記憶體中的地址對照表以確定目的MAC(網卡的硬體地址)的NIC(網卡)掛接在哪個連線埠上,通過內部交換矩陣迅速將數據包傳送到目的連線埠,目的MAC若不存在,廣播到所有的連線埠,接收連線埠回應後交換機會“學習”新的地址,並把它添加入內部MAC地址表中。使用交換機也可以把網路“分段”,通過對照IP位址表,交換機只允許必要的網路流量通過交換機。通過交換機的過濾和轉發,可以有效的減少衝突域,但它不能劃分網路層廣播,即廣播域。交換機在同一時刻可進行多個連線埠對之間的數據傳輸。每一連線埠都可視為獨立的網段,連線在其上的網路設備獨自享有全部的頻寬,無須同其他設備競爭使用。當節點A向節點D傳送數據時,節點B可同時向節點C傳送數據,而且這兩個傳輸都享有網路的全部頻寬,都有著自己的虛擬連線。假使這裡使用的是10Mbps的乙太網交換機,那么該交換機這時的總流通量就等於2×10Mbps=20Mbps,而使用10Mbps的共享式HUB時,一個HUB的總流通量也不會超出10Mbps。總之,交換機是一種基於MAC地址識別,能完成封裝轉發數據幀功能的網路設備。交換機可以“學習”MAC地址,並把其存放在內部地址表中,通過在數據幀的始發者和目標接收者之間建立臨時的交換路徑,使數據幀直接由源地址到達目的地址。

JavaScriptSwitch語句

如果希望選擇執行若干代碼塊中的一個,你可以使用 switch 語句:

語法:
switch(n)
{case1:執行代碼塊1break
case2:執行代碼塊2break
default:如果n即不是1也不是2,則執行此代碼}
switch(n){case1:執行代碼塊1break
case2:執行代碼塊2break
default:如果n即不是1也不是2,則執行此代碼}
工作原理:switch後面的(n)可以是表達式,也可以(並通常)是變數。然後表達式中的值會與case中的數字作比較,如果與某個case相匹配,那么其後的代碼就會被執行。break的作用是防止代碼自動執行到下一行。實例:
//Monday=1,Tuesday=2,etc.vard=newDate()theDay=d.getDay()switch(theDay)
{case5:document.write("FinallyFriday")breakcase6:
document.write("SuperSaturday")breakcase0:
document.write("SleepySunday")breakdefault:
document.write("I'mlookingforwardtothisweekend!")}
switch語句和具有同樣表達式的一系列的IF語句相似。很多場合下需要把同一個變數(或表達式)與很多不同的值比較,並根據它等於哪個值來執行不同的代碼。這正是switch語句的用途。
注:注意和其它語言不同,continue語句作用到switch上的作用類似於break。如果在循環中有一個switch並希望continue到外層循環中的下一個輪迴,用continue2。
下面兩個例子使用兩種不同方法實現同樣的事,一個用一系列的if語句,另一個用switch語句:例子16-1.switch結構
?
if($i==0){
echo"iequals0";
}elseif($i==1){
echo"iequals1";
}elseif($i==2){
echo"iequals2";
}
switch($i){
case0:
echo"iequals0";
break;
case1:
echo"iequals1";
break;
case2:
echo"iequals2";
break;
}
?>例子16-2.switch結構可以用字元串
switch($i){
case"apple":
echo"iisapple";
break;
case"bar":
echo"iisbar";
break;
case"cake":
echo"iiscake";
break;
}
?>為避免錯誤,理解switch是怎樣執行的非常重要。switch語句一行接一行地執行(實際上是語句接語句)。開始時沒有代碼被執行。僅當一個case語句中的值和switch表達式的值匹配時php才開始執行語句,直到switch的程式段結束或者遇到第一個break語句為止。如果不在case的語句段最後寫上break的話,php將繼續執行下一個case中的語句段。例如:
switch($i){
case0:
echo"iequals0";
case1:
echo"iequals1";
case2:
echo"iequals2";
}
?>
這裡如果$i等於0,php將執行所有的print語句!如果$i等於1,php將執行後面兩條print語句。只有當$i等於2時,才會得到“預期”的結果――只顯示“iequals2”。所以,別忘了break語句就很重要(即使在某些情況下故意想避免提供它們時)。
在switch語句中條件只求值一次並用來和每個case語句比較。在elseif語句中條件會再次求值。如果條件比一個簡單的比較要複雜得多或者在一個很多次的循環中,那么用switch語句可能會快一些。
在一個case中的語句也可以為空,這樣只不過將控制轉移到了下一個case中的語句。
switch($i){
case0:
case1:
case2:
echo"iislessthan3butnotnegative";
break;
case3:
echo"iis3";
}
?>
一個case的特例是default。它匹配了任何和其它case都不匹配的情況,並且應該是最後一條case語句。例如:
switch($i){
case0:
echo"iequals0";
break;
case1:
echo"iequals1";
break;
case2:
echo"iequals2";
break;
default:
echo"iisnotequalto0,1or2";
}
?>
case表達式可以是任何求值為簡單類型的表達式,即整型或浮點數以及字元串。不能用數組或對象,除非它們被解除引用成為簡單類型。
switch支持替代語法的流程控制。更多信息見流程控制的替代語法一節。
switch($i):
case0:
echo"iequals0";
break;
case1:
echo"iequals1";
break;
case2:
echo"iequals2";
break;
default:
echo"iisnotequalto0,1or2";
endswitch;
?>

C語言程式語

Switch用在編程中,如C語言中它經常跟Case一起使用,是一個判斷選擇代碼。其功能就是控制業務流程流轉的。
直線翻譯:switch語句,即“切換”語句;case即“情況”。
switch語句的語法如下(switch,case和default是關鍵字):
switch(controllingExpression)
{
caseconstantExpression1:
caseconstantExpression2:
caseconstantExpression3:
statements;/*當滿足constantExpression1、constantExpression2、constantExpression3任何一個都執行statements*/
break;
caseconstantExpression:
statements;
break;
...
default:
statements;
break;
}
遵守switch語句規則
switch語句非常有用,但在使用時必須謹慎。所寫的任何switch語句都必須遵循以下規則:
只能針對基本數據類型使用switch,這些類型包括int、char等。對於其他類型,則必須使用if語句。
switch()的參數類型不能為實型。
case標籤必須是常量表達式(constantExpression),如42或者"42"。
case標籤必須是惟一性的表達式;也就是說,不允許兩個case具有相同的值。
C語言switch套用例子:
例一:
#include
intmain()
{
doublescore;
printf("請輸入分數:\n");
scanf("%lf",&score);
switch((int)(score/10))//switch((int)score/10)出現嚴重錯誤
{
case10:
case9:printf("A(最好)\n");break;
case8:printf("B(優秀)\n");break;
case7:printf("C(良好)\n");break;
case6:printf("D(及格)\n");break;
case5:
case4:
case3:
case2:
case1:
case0:printf("E(不及格)\n");break;
default:printf("Error!\n");
}
}
例二:
#include
intmain()
{
charrank;
printf("請輸入分數等級:(A、B、C、D、E)\n");
scanf("%c",&rank);
switch(rank)//switch((int)score/10)出現嚴重錯誤,switch(((int)score)/10)出現嚴重錯誤,
{
case'A':printf("A(90~100)\n");break;
case'B':printf("B(80~89)\n");break;
case'C':printf("C(70~79)\n");break;
case'D':printf("D(60~69)\n");break;
case'E':printf("E(0~59)\n");break;
default:printf("error!\n");break;
}
}
例三:
輸入年月日,判斷這一天是這一年的第幾天。
#include
intmain()
{
intyear,month,date,leap,days=0;
scanf("%4d%2d%2d",&year,&month,&date);
leap=(year%4==0&&year%100!=0||year%400==0);
switch(month)
{
case12:days+=30;
case11:days+=31;
case10:days+=30;
case9:days+=31;
case8:days+=31;
case7:days+=30;
case6:days+=31;
case5:days+=30;
case4:days+=31;
case3:days+=28+leap;
case2:days+=31;
case1:days+=date;break;
}
printf("%4d年%2d月%2d日是這一年的第%d天。\n",year,month,date,days);
}
PHPSwitch語句
如果您希望有選擇地執行若干代碼塊之一,請使用Switch語句。
使用Switch語句可以避免冗長的if..elseif..else代碼塊。
語法
switch(expression)
{
caselabel1:
codetobeexecutedifexpression=label1;
break;
caselabel2:
codetobeexecutedifexpression=label2;
break;
default:
codetobeexecuted
ifexpressionisdifferent
frombothlabel1andlabel2;
}
工作原理:
對表達式(通常是變數)進行一次計算
把表達式的值與結構中case的值進行比較
如果存在匹配,則執行與case關聯的代碼
代碼執行後,break語句阻止代碼跳入下一個case中繼續執行
如果沒有case為真,則使用default語句
switch語句注意事項
switch(exprl){
caseexpr2:
statements;
break;
caseexpr3:
statements;
break;
default:
statements;
break;
}
switch語句執行時會從上到下根據括弧中表達式的值作比較,當某個case語句中的表達式與此值相同時,就執行這個case語句或語句序列,直到遇到break為止。break語句是必須有的,它用來結束switch語句的執行。如果所有case語句後面的表達式都不等於switch語句的表達式expr1的值川0執行default後面的默認語句序列。不過,default部分是可選的。如果沒有這一部分,並遇到所有case語句都不匹配,那么,就不作任何處理而進入後續程式段的執行。
可見,一個switch語句可以代替多個if-else語句組成的分支結構,而switch語句從思路上顯得更清晰。
使用switch語句時,要注意expr1必須是符合byte,char,short,int類型的常量表達式,而不能用浮點類型或long類型,也不能為一個字元串。
1switch(colorNum){
2case0:
3setBackground(colo.red);
4break;
5case1:
6setBackground(color.green);
7break;
8default:
9setBackground(color.black);
10break;
11}
switch還有一個用法:
1switch(colorNum){
2case0:
3case1:
4setBackground(color.green);
5break;
6default:
7setBackground(color.black);
8break;
9}

相關詞條

相關搜尋

熱門詞條

聯絡我們