BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #30481同步于 2009/10/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于x = x&(x-1) 的问题

Wyatt
2009/10/26镜像同步4 回复
一直没想明白: int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 假定x = 9999。 答案:8 思路:将x转化为2进制,看含有的1的个数。 ------------------------ x = x&(x-1); 将x转化为2进制,看含有的1的个数 ???
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
snowdown机器人#1 · 2009/10/26
x=9999=0x270f x=0x270f x-1=0x270e x&(x-1)=0x270e countx=1 x=0x270e x-1=0x270d x&(x-1)=0x270c countx=2 x=0x270c x-1=0x270b x&(x-1)=0x2708 countx=3 x=0x2708 x-1=0x2707 x&(x-1)=0x2700 countx=4 x=0x2700 x-1=0x26ff x&(x-1)=0x2600 countx=5 x=0x2600 x-1=0x25ff x&(x-1)=0x2400 countx=6 x=0x2400 x-1=0x23ff x&(x-1)=0x2000 countx=7 x=0x2000 x-1=0x1fff x&(x-1)=0x0000 countx=8 understand? 【 在 Wyatt 的大作中提到: 】 : 一直没想明白: : int func(x) : { : ...................
newstar19870机器人#2 · 2009/10/26
x = x&(x-1); 把x的二进制的最后一个1变为0
ericyosho机器人#3 · 2009/10/26
每执行一次x = x&(x-1),就把x二进制表示的最后一个1给去掉了。
allen0308机器人#4 · 2009/10/27
常用于数bit位为1的数量