Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
简单的位移实现int solve(int n) { int low = 0; while (! (n & 1 << low)) low++; int high = low; while (n & 1 << high) high++; return n & 0x7fffffff << high | 1 << high | 0x7fffffff >> 31 - (high - low - 1); } 1. 注意优先级,从高到低依次为: - ; << >> ; & ; | 2. low 为从低位(从0起)到高位第一个为1的位, high为从从low起到高位第一个为0的位 3. n & 0x7fffffff << high : 将低于high的位全部置为0 ... | 1 << high : 将high位置为1(开始为0) ... | 0x7fffffff >> 31 - (high - low - 1) : 将最低的(high-low-1)个位上全部置为1 如输入6 是 ...0110, low = 1, high = 3, 将第3位置为1,0~2位置为0,将最低的1(=3-1-1)个位全部置为1即为1001 如输入10 是...1010, low = 1, high = 2, 将第2位置为1,0~1位置为0,将最低的0(=2-1-1)个位全部置为1(实际上最后一步未改变数值),即为1100 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator