7.5.3 WMLScript位操作符 - 编程吧

上一篇 | 下一篇

7.5.3 WMLScript位操作符

发布: 2007-7-20 13:51 | 作者: 佚名 | 来源: 转载 | 查看: 11次


7.5.3  位操作符
位操作符在运算时先将操作数转化为32位的二进制数,然后对每个操作数分别按位进行运算,运算后再将二进制的结果按照标准WMLScript数值类型返回运算结果。例如,对于操作数6,二进制的表示方式为110,而对于操作数3,二进制的表示方式为11。位操作符共有7种,分别介绍如下。

(1) &。这是位与操作符,它可以对两个操作数按位进行与操作,其运算规则是:

0&0=0,0&1=0,1&0=0,1&1=1

例如,在进行6&3运算时,将6和3按二进制方式表达出来,就是110&011,然后再逐位按位进行与操作:左起第1位1&0、左起第2位1&1、左起第3位0&1,从而最后结果为010,这是二进制表示的2,所以6&3=2。

(2) |。这是位或操作符,它可以对两个操作数按位进行或操作,运算规则是:

0|0=0,0|1=1,1|0=1,1|1=1

例如,在进行6|3运算时,按照二进制方式表达就是110|011,逐位按位进行或操作后结果为111,所以6|3=7。

(3) ^。这是位异或操作符,它可以对两个操作数按位进行异或操作,其运算规则是:

0^0=0,0^1=1,1^0=1,1^1=0

例如,在进行6^3运算时,按照二进制方式表达就是110^011,按位进行异或操作后结果为101,所以6^3=5。

(4) ~。这是位非操作符,它只有一个操作数,可对操作数按位进行非操作,运算规则是:~0=1,~1=0。

例如,在进行~6运算时,WMLScript中6的二进制表达式实际上应该是00000000 00000000 00000000 00000110,在前面介绍几个位操作中,因为前面的0的与、或、异或操作结果都是0,不影响运算结果,所以我们把这些0给忽略了,但在位非操作时,我们必须保留这些0,按位进行非操作后,结果为11111111 11111111 11111111 11111001,它的数值为-7,所以~6=-7。

(5) <<。这是左移操作符,它可以对左操作数进行向左移位的操作,右操作数给定了要移动的位数,在移位过程中,左操作数的最低位补充0。

例如,对于表达式6<<1,6的二进制表达方式为110,然后向左移动1位,移位结果为1100,所以6<<1=12。

(6) >>。这是右移操作符,它可以对左操作数进行向右移位的操作,右操作数给定了要移动的位数,在移位的过程中,丢弃向右移出的位。

例如,对于表达式6>>2,6的二进制表达方式为110,然后向右移动2位,移位结果为1,所以6>>2=1。

(7) >>>。这是填0右移操作符,它与右移操作符相似。当对正整数进行操作时,它们的效果完全相同;不同之处在于,当进行负整数右移操作时,因为负数转化为二进制后,最高位为1,所以在进行右移操作后,最高位仍然补充1,而在进行填0右移操作时,最高位补充的是0,因此,这时负数将转化为正数。

例如:-3>>1=-2,-3>>>1=2147483646。这是因为,-3的二进制表示为11111111 11111111 11111111 11111101,在右移操作后为11111111 11111111 11111111 11111110,而在进行完填0右移操作后为01111111 11111111 11111111 11111110。

7.5.4  逻辑操作符
逻辑操作符可以将布尔类型的表达式组合起来,完成逻辑运算操作,然后返回逻辑运算的结果——真或假,这样就可以完成比较复杂的逻辑判断工作。逻辑操作符共有3种:&&、||和!,下面我们就分别介绍一下。

(1) &&。即逻辑与操作符,它只有在两个操作数都为true的时候,返回结果为true,在其他情况下,返回结果为false或者invalid。

例如,表达式(3>2)&&(3<4)的逻辑运算结果为true,因为3>2的结果为true,并且3<4的结果也为true;而表达式(3>2)&&(3>4)的逻辑运算结果为false,因为这里3>4的结果为false,从而导致整个表达式的结果为false。

(2) ||。这是或操作符,它在两个操作数至少有一个为true的时候,返回结果为true,而当两个操作数都为false时,返回结果为false或者invalid。

例如,表达式(2>3)||(3>4)的逻辑运算结果为false,因为2>3的结果为false,并且3>4的结果也为false;而表达式(2<3)||(3<4)的逻辑运算结果为true,因为这里3<4的结果为true,从而导致整个表达式的结果为true。

(3) !。即非操作符,它只有一个操作数。当操作数为true时,返回结果为false;当操作数为false时,返回结果为true。

例如,表达式 !(2>3) 逻辑运算结果为true,因为2>3的结果为false,而表达式 !(2<3)的逻辑运算结果为false,因为2<3的结果为true。

我们给出下面一条语句,或许能够更形象地表达逻辑操作符的运算规则:

weAgree = (iAmRight && youAreRight) ||  (!iAmRight && !youAreRight);

由于WMLScript只能使用布尔值进行逻辑运算,所以当对其他类型的数据进行逻辑运算时,需要先这些类型的数据自动转换为布尔型。具体转换规则我们后面讨论。

需要说明的是,如果与、或操作符的第一个操作数是invalid,那么WMLScript将不计算第二个操作数的值,并且整个结果就是invalid。下面的例句说明了这一点:

var a = (1/0)  ||  foo ( );       // 由于1/0为invalid,所以结果为invalid,不再调用函数foo ( )

var b = true  ||  (1/0);          // 结果为true

var c = false  ||  (1/0);         // 结果为invalid

字号: | 推荐给好友

 

评分:0

我来说两句

seccode