c++中关于计算整数二进制1的个数

danis_wang 2010-03-09 07:27:28
在计算整数二进制个数的方法就是右移
int num = 0;
while(type)
{
num += (type & 0x01);
type >>= 1;
}
return num;

为什么type要和0x01相与?这样 type&1 可以吗?
type & 0x01具体是怎么操作的
...全文
880 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
danis_wang 2010-03-10
  • 打赏
  • 举报
回复
type是int型的 (type & 0x01)结果是int型的?
djlxue 2010-03-10
  • 打赏
  • 举报
回复
基本概念,要判断某个二进制位是否为1就用1和他进行 & 运算
1 & 1 = 1 //说明是1
0 & 1 = 0 //说明是0

补充一下:要判断某个二进制位是否为0就用0和他进行 | 运算
1 | 0 = 1 //说明是1
0 | 0 = 0 //说明是0
r11222 2010-03-10
  • 打赏
  • 举报
回复
学习·
~~~~~~~~~~~~~~
、~~~~~~··
~
lost_guy_in_scut 2010-03-09
  • 打赏
  • 举报
回复
引用 3 楼 yyg990441 的回复:
引用 2 楼 liuyefengde 的回复:这个代码是错的把,与运算是“&&”
&&--逻辑与
&--按位与

good
wssen 2010-03-09
  • 打赏
  • 举报
回复
一边调试,一边查看寄存器,用16进制模式查看。
xboy 2010-03-09
  • 打赏
  • 举报
回复
0x01相当于 二进制:... 0001

你程序中描述的type抽象一点用二进制表达也是: ... xxxx//x为0或者1
而type&0x01就相当于 1&x
如果x为0,那么表达式为0,如果x为1,那么表达式为1

当然你也可以不正做,通过判断移动后type是奇数还是偶数来数个数;
============================
其实不用&数也很方便,效率会低一点
num += (type & 0x01);
改为:
num += type%2;//余数为1表示奇数,当然二进制尾巴是1;当余数为0时,其二进制尾巴肯定是0
冻结 2010-03-09
  • 打赏
  • 举报
回复
0x01 == 1.当然可以!
jiangxc2004 2010-03-09
  • 打赏
  • 举报
回复
是正确的,按位“与”运算,不是逻辑“and”
引用 2 楼 liuyefengde 的回复:
这个代码是错的把,与运算是“&&”
冻结 2010-03-09
  • 打赏
  • 举报
回复
&1就说明整数的二进第0位是1! >>作用是遍历每一位!
yyg990441 2010-03-09
  • 打赏
  • 举报
回复
引用 2 楼 liuyefengde 的回复:
这个代码是错的把,与运算是“&&”

&&--逻辑与
&--按位与
yyg990441 2010-03-09
  • 打赏
  • 举报
回复
为什么type要和0x01相与?这样 type&1 可以吗?
可以
type & 0x01具体是怎么操作的按位与即type2进制最后一位为1结果为1;为0结果为0
liuyefengde 2010-03-09
  • 打赏
  • 举报
回复
这个代码是错的把,与运算是“&&”

64,664

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧