跳至内容

Bitwise Operations

位运算

补码转换

将变量值转换为补码。当变量值为0时,表达式中的所有位都包含1;当变量值为1时,所有位都包含0。

b = ~n;

示例:

char a='a',b;
   b=~a;
   Print("a = ",a, "  b = ",b);
// The result will be:
// a = 97   b = -98

右移

x的二进制表示向右移位y位。如果要移位的数值是无符号类型,则进行逻辑右移,即左侧的空位将被填充为零。

如果要移位的数值是符号类型,则进行算术右移,即左侧的空位将填充符号位的值(如果数为正,符号位的值为0;如果数为负,符号位的值为1)。

x = x >> y;

示例:

char a='a',b='b';
   Print("Before:  a = ",a, "  b = ",b);
//--- shift to the right
   b=a>>1;
   Print("After:   a = ",a, "  b = ",b);
// The result will be:
// Before:  a = 97   b = 98
// After:   a = 97   b = 48

左移

x的二进制表示向左移位y位,右侧的空位将被填充为零。

x = x << y;

示例:

char a='a',b='b';
   Print("Before:  a = ",a, "  b = ",b);
//--- shift to the left
   b=a<<1;
   Print("After:   a = ",a, "  b = ",b);
// The result will be:
// Before:  a = 97   b = 98
// After:   a = 97   b = -62

不建议将位数大于或等于要移位的变量的长度,因为这样的操作结果是不确定的。

位与运算

x和y的二进制编码表示之间的位与运算。当x和y都非零时,表达式中的所有位都包含1(TRUE),其他所有位都包含0(FALSE)。

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

示例:

char a='a',b='b';
//--- AND operation
   char c=a&b;
   Print("a = ",a,"  b = ",b);
   Print("a & b = ",c);
// The result will be:
// a = 97   b = 98
// a & b = 96

位或运算

x和y的二进制表示之间的位或运算。当x或y不包含0时,表达式中的所有位都包含1,其他所有位都包含0。

b = x | y;

示例:

char a='a',b='b';
//--- OR operation
   char c=a|b;
   Print("a = ",a,"  b = ",b);
   Print("a | b = ",c);
// The result will be:
// a = 97   b = 98
// a | b = 99

位异或运算

x和y的二进制表示之间的位异或运算。当x和y的二进制值不同时,表达式中的所有位都包含1,其他所有位都包含0。

b = x ^ y;

示例:

char a='a', b='b';
//--- Excluding OR operation
   char c=a^b;
   Print("a = ",a,"  b = ",b);
   Print("a ^ b = ",c);
// The result will be:
// a = 97   b = 98
// a ^ b = 3

位运算仅适用于整数

另请参阅

优先级规则

最后更新于