首页 > 代码库 > JavaScript中的移动位运算

JavaScript中的移动位运算

因为技术知识太浅显,一次面试过程中面试官问了我一个这样的问题"1>>2=?"

之前属实一直没有碰到过,回来百度也没有太多东西,后面看高程知道这个叫做有符号右移运算,具体步骤是:

(1)先把1转换成二进制数00000001;

(2)然后右移两位,空位根据前面符号位补齐00000000;

(3)即1>>2结果为0;

如果-1>>2=?,

(1)相同先转换二进制11111111;

(2)步骤二也是相同的,根据符号位补齐右移11111111;

(3)因为是负数,所以二进制负数转换成十进制数结果为10000001,即-1>>2结果还是-1;

那么在说说无符号位右移,即1>>>2=?,对于正数来说,无符号位右移和有符号位右移是一样的,但是对于负数来说,就有所不同了,下面只针对负数说一下无符号位右移:

(1)还是先将十进制转换成为二进制数,即-1=11111111;

(2)然后右移,与有符号位右移不同的是无符号位右移出现的空位不是用符号位补齐而是用0补齐,并且是会按照正数的方式移动不考虑符号位的存在,00111111;

(3)所以通常负数的无符号位右移的结果会非常大。

右移说完了,左移和右移是一样的,位移不同的是不需要考虑符号位,在后面的空位自动补0即可;

因为提到十进制和二进制的转换问题,所以顺便说一下:

十进制转二进制:

正数,直接转化,如 2 = 00000010

负数,则先求出其绝对值的二进制然后在取反码加一即可,如:-2=|-2|+1=11111101+1=11111110;

二进制转十进制:

正数,一样直接转换,如00001000=8;

负数,先减一在求其反码,符号位保持不变即可,如11111001=(-1111000-1)=-0001000,然后正常转换得-8;

JavaScript中的移动位运算