JS 中位取反

var a  = 0x0e0e;
这个换算成2进制位 0000 1110 0000 1110
~a则为 1111 0001 1111 0001 
转为16进制后为-3599
但是我现在想不考虑负数,取反后得到正数,也就是直接转为 1111 -> f,0001 -> 1, 1111 ->f, 0001 ->1即(f1f1),大神们有什么好的办法吗?
阅读 4.2k
4 个回答

直接a^0xffff不就是你最后的结果吗?

通过>>>强制转换为unsigned int,如下所示:

// 3598
var a = 0x0e0e;
// -3599
console.log(~a);
// 4294963697
console.log((~a)>>>0);

由于是32位整数,得到的结果也考虑了高16位的1,输出比你预想的要大。

参考:http://stackoverflow.com/a/1908655/2599831

用异或每次取4bit

转为16进制后为-3599 是10进制吧。。 表示我也不知道,昨天晚上不知道 >>> 是啥意思,今天就看到了 0.0

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题