下载MetaTrader 5

逐位运算

补码

补充变量值,表达值包含1,可变值包含0,表达值包含0,可变值包含1。

b = ~n;

示例:

   char a='a',b;
   b=~a;
   Print("a = ",a, "  b = ",b);  
// 结果将会是:
// a = 97   b = -98

右移

运算符x向右移动到数字y代表二进制代码。如果移动的值是无符号类型,进行逻辑右移,即左侧将被零填满。

如果移动的值是符号类型,进行算术右移,即左侧将被符号填满(如果数字是正值,符号为零值;如果数字为负值,符号值为1)。

x = x >> y;

示例:

   char a='a',b='b';
   Print("Before:  a = ",a, "  b = ",b); 
//--- 右移
   b=a>>1;
   Print("After:   a = ",a, "  b = ",b); 
// 结果会是:
// 之前:  a = 97   b = 98
// 以后:   a = 97   b = 48

左移

运算符x向左移动到数字y代表二进制代码,即右侧将被零填满。

x = x << y;

示例:

   char a='a',b='b';
   Print("Before:  a = ",a, "  b = ",b); 
//--- 左移
   b=a<<1;
   Print("After:   a = ",a, "  b = ",b); 
// 结果会是:
// 之前:  a = 97   b = 98
// 之后:   a = 97   b = -62

不建议移动大的数字或者与移动变量长度相等的数字,因为运算结果无法确定。

位逻辑运算符 AND

二进制的x和y代表位逻辑运算符AND。在所有数组中x和y的值都不含有零表达式的值包含1(TRUE);在所有其他数字中包含 0 (FALSE) 。

b = ((x & y) != 0);

示例:

   char a='a',b='b';
//--- AND 操作
   char c=a&b;
   Print("a = ",a,"  b = ",b);
   Print("a & b = ",c);
// 结果会是:
// a = 97   b = 98
// a & b = 96

位逻辑运算符OR

二进制的x和y代表位逻辑运算符OR。在所有数字中x和y的值都不等于零表达值包含1 并且在所有其他数字中包含0。

b = x | y;

示例:

   char a='a',b='b';
//--- 或者操作
   char c=a|b;
   Print("a = ",a,"  b = ",b);
   Print("a | b = ",c);
// 结果将会是:
// a = 97   b = 98
// a | b = 99

位逻辑运算符Exclusive

二进制的x 和y代表位逻辑运算符EXCLUSIVE (eXclusive OR)。在所有数字中x和y的值都不同于二进制值表达值包含1并且在所有其他数字中包含0 。

b = x ^ y;

示例:

   char a='a', b='b';
//--- 免除或者执行
   char c=a^b;
   Print("a = ",a,"  b = ",b);
   Print("a ^ b = ",c);
// 结果会是:
// a = 97   b = 98
// a ^ b = 3

位逻辑运算符只作用于integers

另见

优先规则


更新: 2015.12.03