国内知名网站制作公司,上海公司车牌最新价格,网站优化及推广公司,美的地产集团官方网站建设1、含义 -x 的值#xff0c;其实就是在x的值的基础上进行按位取反#xff08;~x#xff09;之后在增加1所得#xff08;C语言中#xff0c;-x实现是用取反1实现#xff09;也就是说#xff1a;x -x x (~x 1) 2、x 为偶数 当一个奇数 1时#xff0c;表示…1、含义 -x 的值其实就是在x的值的基础上进行按位取反~x之后在增加1所得C语言中-x实现是用取反1实现也就是说x -x x (~x 1) 2、x 为偶数 当一个奇数 1时表示的二进制数则会发生进位这样的话会产生一个连锁反应也就是最低位的那些连续的1都会被清0如0000 0000 0111 1111 1 0000 0000 1000 0000 如果一个偶数如 0000 0000 0100 1110取反后的结果就变成了 1111 1111 1011 0001而当这个值 1之后由于发生了进位即1111 1111 1011 0001 1 1111 1111 1011 0010 初始值 和 取反1后的值 相 后只会有一位保留为1 0000 0000 0100 1110 1111 1111 1011 0010 0000 0000 0000 0010 这个结果与最初的值又有什么关系呢 显然 这个值的与原值的末位0的个数是一致的也就是说如果一个偶数在执行 x -x 的操作时最后结果肯定有如下两个特征 ① 这个结果只有一位值是1 其他位均是0
② 这个值的末位0的个数与原值保持一致那这是个什么数呢 这个原值肯定是能被结果值整除的 而这个结果值又是2^ k那我们就可以描述成当一个偶数与它的负值相 时结果是能整除这个偶数的最大的2的幂。【即 m n -n 则 n % m 0 且 m 2 ^ k】 3、x 为奇数 因为奇数取反后的值一定是偶数 而偶数的值 1之后并不会影响进位而 x与其取反的数相 结果肯定是0 但是由于相 的数是取反后再 1的值肯定是个奇数也就是说只有最后一位有翻转所以只有最后一位都是1相 结果仍旧是1而其他位所有的都是相反值 相 必为0。结论如果 x 是奇数 那 x -x 的结果一定是1 4、❗结论 当一个数与其取负后的值相与x -x如果这个数是偶数则结果是能整除这个偶数的最大的2的幂即 m n -n , 则 n % m 0, 且 m 2 ^ k如果这个数是奇数则结果必为1 5、❗用途 一般可以用来获取某个二进制数的 LowBit