运算符的分类

luajit位运算 位运算符怎么计算_运算符


注:

①:位运算符中除了 “ ~ ” 以外,均为二元运算符,即两侧都要各有一个运算量。

②:参加位运算的对象只能是整型或字符型的数据,不能为实型数据。

③:所有的位运算都是在二进制补码的基础上进行操作的。

一:按位与:&

1.表达式: a & b

2.功能: 将左右两个整数的二进制补码按位进行与操作。

3.举例:

luajit位运算 位运算符怎么计算_补码_02

4.计算: 两个位都是1,结果就是1,否则为0。

5.巧用:

设X是一个正整数。

①:X & 1 <=>x % 2用于判断奇偶数判断一个整数的二进制补码尾部是否为1

②:清零: 如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都是零的数值相与,结果为零。

③:取一个数中的指定位:
例如:X=10101110,取X的低四位,用X&0000 1111=0000 1110即可得到。
方法: 找一个数,对应x要取的位,该数的对应位为1,其余位为零,此数与x进行“与运算”可以得到x中的指定位。

二:按位或:|

1.表达式: a | b

2.功能: 将左右两个整数的二进制补码按位进行或操作。

3.举例:

luajit位运算 位运算符怎么计算_补码_03

4.计算: 两个或一个位是1,结果是1,否则为0。

5.巧用:

常用来对一个数据的某些位置1
方法: 找到一个数,对应x要置1的位,该数的对应位为1,其余位为零。此数与x相或可使x中的某些位置1。

三.按位异或:^

1.表达式: a ^ b

2.功能: 将左右两个整数的二进制补码按位进行异或操作。

3.举例:

luajit位运算 位运算符怎么计算_运算符_04

4.计算: 两个位不同,结果是1,否则结果是0。

5.巧用:

①: 与1相异或,使特定位翻转。
方法: 找一个数,对应X要翻转的位,该数的对应为1,其余位为零,此数与X对应位异或即可。
例如: X = 1010 1110,使X低四位翻转,用X ^ 0000 1111 = 1010 0001即可得到。

②: 与0相异或,保留原值。

③: 交换两个值,不用临时变量。
原理: 一个数异或本身等于0 ,异或运算符合交换律。

例如:

x = x ^ y;
    y = x ^ y;
    x = x ^ y;
    //x与y的值发生交换

四.按位非:~

1.表达式: ~a

2.功能: 对一个整数的二进制补码进行非运算。

3.举例:

~ 1 = 0;
     ~ 0 = 1;

4计算: 操作一个数,对位取反,0变成1,1变成0。

五.按位左移:<<

1.表达式: 被操作的数据 << 被位移数

2.举例:

luajit位运算 位运算符怎么计算_运算符_05

3.计算: 左移左边被舍弃,左移右边补0。

4.巧用:

对于正整数而言,左移1位即扩大2倍。
k = x << 1 <=> k = x * 2

六.按位右移:>>

1.表达式: 被操作的数据 >> 被位移数

2.举例:

luajit位运算 位运算符怎么计算_luajit位运算_06

3.计算: 右移右端被舍弃,对无符号数,左边高位补0,对于有符号数,如果原来符号位为0(该数为正),则左边也补0,如果原来符号位为1(该数为负),则左边补0还是1,要取决于所用的计算机系统,补0的称为“逻辑右移”,即简单的右移,不考虑数的符号问题,补1的称为“算数右移”(保持原有的符号)。

4.巧用:

对于正整数而言,右移一位即除以2.
k = x >> 2 <==> k = x / 2