云南网站优化建站,移动4G网站建设,集约化网站建设情况经验材料,制作app用什么软件好文章目录-xx -x#xff0c;当x为偶数时x -x#xff0c;当x为奇数时x-x 的实际用途-x
-x 在二进制里表示对 x 的二进制按位取反(~x)之后再加 1 #xff0c;即
-x ~x1x -x#xff0c;当x为偶数时
在执行 x -x 时#xff0c;若 x 为偶数 -x当x为偶数时x -x当x为奇数时x-x 的实际用途-x
-x 在二进制里表示对 x 的二进制按位取反(~x)之后再加 1 即
-x ~x1x -x当x为偶数时
在执行 x -x 时若 x 为偶数最后结果肯定有如下两个特征
这个结果只有一位值是1 其他位均是0这个值的末位0的个数与原值保持一致
从数学上推导因为 偶数 的二进制末尾一定由 k 个 0 构成如1106 1004。 那么对其按位取反一定得到 k 个 1 当再对 ~x 进行 加一 操作后一定能得到 1个1 和 k个0 而在 1 前面的数已经全部 按位取反 唯有 1 后面的数经过 取反-加一进位形同再次取反 变回了原来的数但我们知道1 后面原本就是 k个0 因此 证得上述两个特征。
用几个实例来证明
x 4
x100
~x: 011
-x~x1: 100
x -x: 100x 6
x: 110
~x: 001
-x: 010
x -x: 010x 10
x: 1010
~x: 0101
-x: 0110
x -x: 0010而这个结果有什么用呢实际上这个结果是能整除这个偶数的最大的2的幂, 即 m n -n 则 n % m 0 且 m 2 ^ k 。 x -x当x为奇数时
x 为奇数时就比较简单了 因为奇数取反后的值一定是偶数 也就是有 k个0 。对其进行 加一 操作也就是变成了 k-1个0 和 1个1 形如00…001k-1个0不会发生进位因此只有最后一位变成了原本的数也就是 1 因此 x-x 值为 1 。
用几个实例来证明
x 3
x11
~x: 00
-x~x1: 01
x -x: 01x 5
x: 101
~x: 010
-x: 011
x -x: 001x 11
x: 1011
~x: 0100
-x: 0101
x -x: 0001x-x 的实际用途
实际上如果用过 Lowbit函数 那么此时已经会恍然大悟了没错 x -x 正是 Lowbit函数 的一种实现方式。
这里简单说一下什么是 Lowbit函数 Lowbit函数用来返回参数转为二进制后最后一个1的位置所代表的数值。例如Lowbit(34)的返回值将是2而Lowbit(12)返回4Lowbit(8)返回8参数为任何奇数时返回1。