注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

chunwaihome 的博客

 
 
 

日志

 
 

Operator in Expressions  

2010-01-17 20:07:04|  分类: Powerpro腳本學習 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Structure of expressions
  在程式語言中, 指示程式進行運算 (計算、比較或連結) 的符號, 稱為 operators (運算子), 被運算的資料稱為 operands (運算元), 一句中有 operators 及 operands 就稱為expression

  以 if...else statement 為例, 在 if(condition) 這一句, 實際有以下語法:

if(expression)
    {  statement1 }
 else {  statement2  }

  這處的 expression 就是設定 condition 的語句, 例如 x==y 就是一個 expression, 是檢查 x 是否等於 y , == 是 operator , xy 是 operands。

variable = string1++string2

等於後面的一切(string1++string2)都是expression, 而兩個的字符串用兩個加號作連接。如果expression包括多過一個value,我們名它為complex expression。此例中,string1和string2都是一個固定值,其實在Expression中還可以包括另一expression,比如

variable = string1 ++ length(string2 ++ string3)

Express是由一連串的數值(Values)和運算符(operators)組成的。最簡單的expression可能只包含了一個數值(Values),Complex expression是由兩個或多個數值(Values)用運算符連接組成的,而在complex expression裏計算的方法是由左到右,括號和操作優先權會被考盧的。

什麼是優先權比如先乘除後加減,1+2*3等於7。

 

numbers as values

你可以使用或不用双引號括住數字,Powerpro會判斷它是數字或字符串。比如以下的命令

alpha = "5" + 7

雖然5這個數字用引號括住,但powerpro仍判斷它視為數字看待,結果alpha值是12。留意若數字是floating point的話,一定不可在數字上加上双引號。

strings or numbers

Powerpro能夠在Expression中使用字符串(strings)或者數字(Numbers),而且它會使用最適合的操作(operator)。

"-12" + 9                           //yields the number 3

"-12" join "ab"                   //yields the string "-12ab"
5.1*math.sqrt(4.0)            //yields the floating point number 10.2

Internally, PowerPro stores all values except floating point numbers as strings.  Floating point numbers can be turned back to strings with the floattostring (or ftos) function.

Mathematical operators

各算術運算子在處理上的優先次序(precedence) 是依一般算術規則: 先乘除, 後加減, 若有一些運算要優先處理, 可放在 ( ) 內, 例如:

      3 + 4 / 2 = 5
     (3+4) / 2 = 3.5

Local Num = 11             //這裏的"="符號雖然和日常數學那個"加號"是樣子是一樣,

Num = Num + 2              但意思完全不同,在程式語言裏它叫"assignment operator"
Debug &(Num)               執行命令後得出Num結果是13。

在一般程式中, assignment operator 是 "配值運算子", 是使用 = 這符號將右方的值配給左方的變數。等號的右邊必須放置「有值」的資料,例如數值、字串、變數、固定變數、運算式等等,而在等號的左邊則必需是個「變數」。
除了加號外,下表還有其他旳operator供大家參考

 Operators

  Function

用法

+  加(add)  a+b
 -  減(subtract)  a-b
 *  乘(multiply)  a*b
 /  除(divide)  a/b
 %  餘數(modulus)  a%b

在撰寫程式時%符號常被使用到,例如我們希望能夠判斷某數字是否可以被3整除,只需要判斷相除後的「餘數」是否為零即可。

Comparsion Operators

Comparsion Operators也是operator的一種,但它能夠比較兩個數字(numbers)或者字串符(strings)。例如5>4、File>Edit,而Powerpro在比較字串符時是不分大小楷的。因此file和FILE是相等於的,下表是一些常用的比較符號,在腳本裏您可以選擇用Operator或symbolization符號,它們基本是相等於的。

這處要重複說明 == (equal) 與 = (assignment) 的分別, 因為初學程式者都會一時大意犯錯, 例如:

a=b+5 這是 assignment statement, 是將 b 加 5 的結果變為 a 的新值。
a==b+5 這是 comparison expression, 是看 a 是否等於 b+5, 一般是與 if statement 合用, 例如 if(a==b+5) 。

 Operator

 Symbolization

 

  Meaning

  not  !  

Result is 1 if following value is 0, otherwise result is 0

在此我們可以用debug命令來顯示結果

win.debug(not("099"=="99"))

此命令是測試099和99是否不相等,如果不相等的話,回返值是1,若相等回返值則是0。

因為"099"=="99"是相等的,得出結果是1,因此not("099"=="99")的回返值將會是0。

 ~      Result is bitwise not of following value 
   ==  eq  equal  

如果左右兩边都是數字的話,它會以數字(Numbers)作比較。因此 "099" == "99" 得出結果是true或1。

 ===      

和"=="不同之處是"==="會將左右兩边以字串符(string)作比較

因此"099" == "99" 得出結果是false或0。

 !=  ne not equal  
 !==      和!=不同的是!==會將左右兩边以string作比較

 "99" !== "099" 是 1代表true

 <  lt less than  
  <=  le less equal  
  >  gt greater than  
  >=  ge greater equal  
 &&  and    結果是1如果左右兩边都是true的話

win.debug(("099" == "99") and ("066" == "66"))

注意) and (需要留一空格

或者

win.debug(("099" == "99") && ("066" == "66"))

得出結果是1

)&&(則不需留空格

Notes: Operators which consist solely of alphabetics, like and or not, must be preceded and followed by a blank when used.

&& and || are fully evaluated unless the shortcut evaluation option on Setup|Advanced|Other is checked; by default, it is checked.

 &  and
 &和&&基本是一樣的。除了在)&(時需留空格

win.debug(("099" == "99") & ("066" == "66"))

得出結果是1  

Result is bitwise and of both values

 ||  or    結果是1如果左右兩边其中一边是true的話

win.debug(("099" == "99") or ("066" == "66"))

注意) or (需要留一空格

或者

win.debug(("099" == "99") || ("066" == "66"))

得出結果是1

)||(則不需留空格

 |   or
 |和||基本是一樣的。除了在)|(時需留空格

win.debug(("099" == "99") | ("066" == "66"))

得出結果是1

Result is bitwise and of both values

 ^^   xor
 結果是true如果一边是true而另一边是false的話
 ^   xor
 Result is bitwise and of both values
       
       
       

 

true 及 false 的傳回:

  使用一個 comparison operator 時, 這operator會傳回 true 或 false 這兩個值, 有時我們可以利用這兩個字作進一步的操作, 請看以下例子:

a = (5 == 1 )      這會得出 a=false 的結果
b = (5 > 1 )       這會得出 b=true 的結果

我們可以用win.debug(a,b)來傳回a和b兩個變數的回返值,得出結果分別是"0"和"1"。

註一

  • ==和===的不同之處

首先,如果使用「==」相等運算子來比較資料,powerpro會試著將資料轉換成相同的資料類型,然後對資料進行比較以檢查是否相等。例如:

local data1 = 100

local data2 =100

win.debug(data1==data2) 

在上述程式當中,我們宣告告了兩個變數,變數的資料都是存放100,可是資料的型別不同,data1變數存放的整數型別,而data2變數存放的則是字串型別,使用「==」相等運算子來比較資料是否相等時,powerpro會試著將資料轉換成相同的資料類型,然後對資料進行比較,以上述程式來說結果為「true」(真)。

如果改用「===」嚴謹相等運算子來比較資料的話,則連資料的型別都必須一致

 在上述程式當中改用「===」嚴謹相等運算子時,由於資料型別不一致所以比較的結果為「false」(假)。

 

邏輯運算子(Logical Operators)

 

 Logical Operators

 說明

 &&  And
 ||  Or
 !  Not

「&&」邏輯運算子就是並且的意思,如果在寫程式時有多個條件必須要同時成立,程式就可以使用「&&」運算子來連接多個布林運算式,以下為不同的布林值的組合結果:

 &&邏輯運算子

 運算後的結果

 true && true  true
  true && false  false
 false && false  false


「||」邏輯運算子就是或者的意思,如果在寫程式時有多個條件而只需要其中之一成立的話,這時就可以使用「||」運算子來連接多個布林運算式,以下為不同的布林值的組合結果:

 ||邏輯運算子   運算後的結果
 true || true  true
 true || false  true
 false || false  false

 

複合指定運算子(Compound assignment operators)

「複合指定運算子」則是將運算元進行指定的運算,運算完之後並將結果結果存入指定變數中的運算子,列表如下:

運算子 說明
+= 將累加後的資料存入指定變數
-= 將減法後的資料存入指定變數
*= 將相乘後的資料存入指定變數
/- 將相除後的資料存入指定變數
<<= 將位元左移後的資料存入指定變數
>>= 將位元右移後的資料存入指定變數
>>>= 將正整數位元右移後的資料存入指定變數

以下運算是相同的意思

運算式 複合指定運算式
num = num + 10 num += 10
num = num - 10 num -= 10
num = num * 10 num *= 10
num = num / 10 num /= 10
num = num % 10 num %= 10
num = num << 10 num <<= 10
num = num >> 10 num >>= 10
num = num >>> 10 num >>>= 10

最後我們要看到++及--符號,也就是遞增及遞減運算子,由於在進行算數運算時,我們經常會將變數中的數值進行加一或減一的運算,例如:

Local Num = 10

Num = Num + 1
Debug &(Num)

這時在畫面上的輸出會顯示為11,因為a = a + 1會讓 a + 1的結果再次存放於a變數中,如下圖所示:

Operator in Expressions - Y偉 - chunwaihome 的博客

 

所以如果想要簡化上述程式,則可以使用遞增「++」運算子來進行運算。如果將上述程式用遞增運算子

Local Num = 11

Num ++
Debug &(Num)

 

 

位元運算子(Bitwise Operators)

「位元運算子」是用進行位元運算的運算子,powerpro0所提供的位元運算子列表如下:

 運算子

 說明

 &  位元AND
 |  位元OR
 ^  位元XOR
 ~  Not

  • 取反(NOT)

取反是一元運算符, 對一個二進位數的每一位執行邏輯操作. 使數字1成為0, 0成為1. 例如:

NOT 0111 (十进制 7)
= 1000 (十进制 8)

許多程式語言(包括C程式語言 family), 取反操作符用波浪線"DE>~DE>"表示。

  • 按位或(OR)

按位或處理兩個長度相同的二進位數, 兩個相應的二進位中只要有一個為1, 該位的結果值為1.

Test 1 | Test 2 Combined result
  1 | 1   1
  1 | 0   1
  0 | 1   1
  0 | 0   0

例如

    0101 (十进制 5)
OR 0011 (十进制 3)
= 0111 (十进制 7)

在C類程式語言中, 按位或操作符是"|". 這一操作符需要與邏輯或運算符(||)區別開來.

  • 按位異或(XOR)

按位異或運算, 對等長二進位模式或二進位數的每一位執行邏輯異或操作. 操作的結果是如果某位不同則該位為1, 否則該位為0. 例如


Test 1 & Test 2 Combined result
  1 ^ 1   0
  1 ^ 0   1
  0 ^ 1   1
  0 ^ 0   0
 
    0101
XOR 0011
= 0110

在類C語言中, 按位異或運算符是 "DE>^DE>".

  •  AND

這是將兩個數字轉為二進位數字, 然後將兩個數字同位置的位元比較, 使用以下的 TRUE-FALSE table:

Test 1 & Test 2 Combined result
  1 & 1   1
  1 & 0   0
  0 & 1   0
  0 & 0   0
 

  這與前面的 && operator 的 TRUE-FALSE table 一樣, 只是轉了用 0 代表FALSE, 1 代表 TRUE。

 

  例如 6 的二進位數字是 0110, 4 是 0100, 假定 a = 6 , a & 4 會有以下比較:

 

Operator in Expressions - Y偉 - chunwaihome 的博客

 

  你可試試以下的 script, 看是否得出 4 的結果。
a = 6
x = ( a & 4 )

Win.debug(x)

Bitwise operators 常在 C 語言用作硬件的控制, 例如 a 的數值是介乎 0 至 15, 就會有 4 個 bit 的位置, 若 a 是 12 (1100), 就會有以下數字:

Operator in Expressions - Y偉 - chunwaihome 的博客

 

  例如你用 a 這變數的 bit-2 來做 flag, 其他 bit-0、bit-1、bit-3 就變成無關重要, 你有興趣知道的是 bit-2 是 0 或是 1, 其中一個方法是用 a&4 這一個檢查, 若結果是 4 (0100) 表示 a 的 bit-2 是 1, 若結果是 0 (0000), 表示 a 的 bit-2 是 0。

  你可試試以下的 script 看有什麼效果:


a = 10
x = ( a & 4 )
if (x == 4)
 win.debug ("a 的 bit-2 是: 1")
if  (x == 0)
 win.debug("a 的 bit-2 是: 0" )


 

  你可更改 a 的數值, 例如 2 (0010)、3 (0011)、5 (0101)、8 (1000) 、9 (1001) 等等, 看這方法是否真的能檢查到 a 的 bit-2 是 0 或是 1。

  评论这张
 
阅读(718)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017