问一个枚举问题

r11222 2010-07-23 10:44:45
输入一个数,m 表示二进制位数

例如 m=3, 就是有3位二进制。

要求输出 3位二进制的所有组合

也就是 ,000 ,001,010,011,100,110,111,101,

要高效,最好能用到位运算

高效是关键,谢谢各位了。
...全文
106 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaowai0219 2010-07-24
  • 打赏
  • 举报
回复
不小心看到的
cao_julians 2010-07-24
  • 打赏
  • 举报
回复
一重循环,整数从0到2^m-1就可以啦。
r11222 2010-07-24
  • 打赏
  • 举报
回复
是啊,用一个函数实现
漫步者、 2010-07-24
  • 打赏
  • 举报
回复
用递归做,我试一试看看!
xiaowai0219 2010-07-23
  • 打赏
  • 举报
回复

//就是对m个元素进行全排列,取法就是从0到2^m-1的所有二进制形式
// 要取得2^m,只需将0xFFFFFFFF左移32-m位,再右移回来就可以了。

unsigned int m;
int i;
int nBit = ( ( 0xFFFFFFFFU << ( 32 - m ) ) >> ( 32 - m ) );
for ( i = 0; i <= nBit; ++i ) {
for ( unsigned int j = 0; j < m; ++j )
cout <<(( i << ( 31 - j ) ) >> 31) ;
cout << '\n';
}
liutengfeigo 2010-07-23
  • 打赏
  • 举报
回复
用一个函数实现?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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