逐位运算
逐位运算
补码
补充变量值,表达值包含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。