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,输出比你预想的要大。
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答889 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
直接
a^0xffff
不就是你最后的结果吗?