【位运算生成枚举序列】

如果遇到这样的枚举情况,一个数组a[6],  每个值只能取0或者1,共有64种情况,我们需要一次枚举出来。

方法1:从0到63一次转换成二进制填充进去(麻烦)。

方法2:位运算实现

代码:

int main(void)
{
    int cnt=0;
    for(int k=0; k<64; k++){ //枚举0---63
        for(int j=0; j<6; j++)  //6个数组位
            if(k&(1<<j)) printf("1 "); //可以在此处将1填充到数组里
            else printf("0 "); //0也是一样
        printf("\n"); cnt++;
    }
    printf("%d\n", cnt ); //cnt==64

    return 0;
}

方法3:

思维巧解实现,没看懂:http://blog.csdn.net/smile_7x/article/details/8526659

这个博客里有,,,

时间: 2024-12-29 11:54:48

【位运算生成枚举序列】的相关文章

Objective-C使用位运算设计可复选的枚举

使用位运算设计可复选的枚举 一.枚举使用的一个小例子 在软件开发中,枚举是我们会经常会用到的一种编程方式,通过枚举,可以使我们的代码更具可读性与统一性.通常情况下,我们会通过typedef来定义一种枚举的类型来使用.例如: typedef enum {     para1,     para2,     para3 }myEnum; 我们可以在函数的参数中来使用它: -(void)testEunm:(myEnum)para{     switch (para) {         case pa

C#枚举中的位运算权限分配浅谈

常用的位运算主要有与(&), 或(|)和非(~), 比如: 1 & 0 = 0, 1 | 0 = 1, ~1 = 0 在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理. 第一步, 先建立一个枚举表示所有的权限管理操作: [Flags] public enum Permissions { Insert = 1, Delete = 2, Update = 4, Query = 8 } [Flags]表示该枚举可以支持C#位运算, 而枚举的每一项值, 我们用2的n次方来赋值, 这样表

C#位运算讲解与示例

原文:C#位运算讲解与示例[转] 在C#中可以对整型运算对象按位进行逻辑运算.按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位.C#支持的位逻辑运算符如表2.9所示. 运算符号 意义 运算对象类型 运算结果类型 对象数 实例 ~ 位逻辑非运算 整型,字符型 整型 1 ~a & 位逻辑与运算 2 a & b | 位逻辑或运算 2 a | b ^ 位逻辑异或运算 2 a ^ b <<  位左移运算 2 a<<4 &g

C#位运算讲解与示例2

在C#中可以对整型运算对象按位进行逻辑运算.按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位.C#支持的位逻辑运算符如表2.9所示. 运算符号 意义 运算对象类型 运算结果类型 对象数 实例 ~ 位逻辑非运算 整型,字符型 整型 1 ~a & 位逻辑与运算 2 a & b | 位逻辑或运算 2 a | b ^ 位逻辑异或运算 2 a ^ b <<  位左移运算 2 a<<4 >>  位右移运算 2 a

[hdoj]3006//位运算+枚举

题意:给出n个集合,问这些集合能组合成几种不同的集合. 思路:枚举+状态压缩.由于1<=m<=14,所以最多有2^14=16 384种状态,每种状态可以存在一个int中.枚举所有的状态,运用位运算,判断能否由这n个集合组成. #include<iostream> using namespace std; int main(){ int n, m, k, w, i, j; int ans, val[105]; while(cin >> n >> m){ for

hdu 1882 Strange Billboard(位运算+枚举)

http://acm.hdu.edu.cn/showproblem.php?pid=1882 感觉非常不错的一道题. 给一个n*m(1<=n,m<=16)的矩阵,每一个格子都有黑白两面,当翻一个格子时,它的上下左右都要翻转,问最后使格子全变为白色的最少翻转步数. 仅仅需枚举第一行的状态即可,由于对于第i(i>=2)行j列翻转情况受上一行的制约,仅仅有当上一行也是'X'的时候,该行j列才干翻转,使i-1行j列变为'.',否则i行j列不能翻转.依次进行下去,当最后一行全变为白色,说明翻转成功

位运算+枚举

位运算http://c.biancheng.net/cpp/html/101.html 在很多情况下(比如翻棋子)在搜索时涉及大量枚举往往导致超时,位运算则很好地解决了这个问题,方便又快捷 HDU  1882   Strange Billboard http://acm.hdu.edu.cn/showproblem.php?pid=1882 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot

POJ 2436 二进制枚举+位运算

题意:给出n头牛的得病的种类情况,一共有m种病,要求找出最多有K种病的牛的数目: 思路:二进制枚举(得病处为1,否则为0,比如得了2 1两种病,代号就是011(十进制就是3)),首先枚举出1的个数等于k的二进制数,然后跟所有的牛的代号一一比较,符合的           +1,找出其中和最大的:就是转换2进制麻烦,用位运算就好实现了,但是位运算不是很明白含义,明白了再补充: 知识点: 3 & 2 = 2,相同为1,不同为0, 011 & 010 = 010:(怎么利用的这个特点不明白):

枚举类型与位运算

目录 枚举 位运算 一.枚举 枚举类型是名称与值的组合. 枚举类型是值类型. 1.为什么枚举类型是名称与值得组合?有时我只看到键名称,没有看到相对的值. public enum Options { Insert, Update, Save, Delete, Query } 编译器会给上面补充完整 public enum Options { Insert=0, Update=1, Save=2, Delete=3, Query=4 } 默认从0开始,依次赋值. 2.为什么枚举类型是值类型 因为Sy