x & (x-1)的意义
来源:互联网 发布:oracle数据库好学吗 编辑:程序博客网 时间:2024/06/08 15:56
其实这个表达式在以前写线段树的时候遇到过了,只是一直没认真去想为什么。它的意义是:
x = x & (x-1)能够将x(二进制表示)的最右边的1变成0
为什么呢?稍加证明一下:
0. 首先需要知道一个简单的事实,a & a = a,无论a = 0还是1。
1. 如果x最右边的1在第k+1位(k>=0),即x = ###10…0(k个0),那么x-1 = ###011…1(k个1),所以与运算的结果为###00…0(k+1个0)。
一般的博客都会写一段经典的C/C++代码来说明,现在我用python演绎一下:
# !/usr/bin/env python3# -*- coding: utf-8 -*-__author__ = 'jacket'import sysdef EliminateTheRightMostOne(x): print('Before, x = {0}'.format(bin(x)[2:])) x = x & (x - 1) print('After, x = {0}\n'.format(bin(x)[2:])) return xdef main(args): x = int(args[0]) while x: x = EliminateTheRightMostOne(x)if __name__ == '__main__': sys.exit(main(sys.argv[1:]))
运行结果为:
>> python TheRightMostOne.py 7Before, x = 111After, x = 110Before, x = 110After, x = 100Before, x = 100After, x = 0
参考:http://blog.csdn.net/likendsl/article/details/8925700
1 0
- x & (x-1)的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- x&(x-1)表达式的意义
- #define __T(x) L ## x 的意义
- #define st(x) do { x } while (__LINE__ == -1)的意义(转)
- squid中的X-Cache和X-Cache-Lookup的意义
- 希尔排序
- 第四次上机实践项目-项目一-三角形类锥形-(1)
- 第五周上机实践项目——项目4-长方柱类
- 关于placeholder的小tip
- NOI2009植物大战僵尸题解
- x & (x-1)的意义
- nginx配置
- CodeForces-626B-Cards
- 数据库表格数据导出到excel方法总结
- 我的Android进阶之旅------>android如何将List<NameValuePair>请求参数列表转换为json格式
- Mysql,Oracle,Java数据类型对应
- JAVA GC机制
- The Python Challenge
- 常用docker命令,及一些坑