var a = 0x0e0e;
这个换算成2进制位 0000 1110 0000 1110
~a则为 1111 0001 1111 0001
转为16进制后为-3599
但是我现在想不考虑负数,取反后得到正数,也就是直接转为 1111 -> f,0001 -> 1, 1111 ->f, 0001 ->1即(f1f1),大神们有什么好的办法吗?
var a = 0x0e0e;
这个换算成2进制位 0000 1110 0000 1110
~a则为 1111 0001 1111 0001
转为16进制后为-3599
但是我现在想不考虑负数,取反后得到正数,也就是直接转为 1111 -> f,0001 -> 1, 1111 ->f, 0001 ->1即(f1f1),大神们有什么好的办法吗?
通过>>>
强制转换为unsigned int
,如下所示:
// 3598
var a = 0x0e0e;
// -3599
console.log(~a);
// 4294963697
console.log((~a)>>>0);
由于是32位整数,得到的结果也考虑了高16位的1,输出比你预想的要大。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
直接
a^0xffff
不就是你最后的结果吗?