zoukankan      html  css  js  c++  java
  • poj3748 位运算 bitset

    位操作
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 9064   Accepted: 3626

    Description

    假设你工作在一个32位的机器上,你需要将某一个外设寄存器的第X位设置成0(最低位为第0位,最高位为第31位),将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其他位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。

    Input

    仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合

    Output

    更改后的寄存器值R(16进制输出)

    Sample Input

    12345678,0,3

    Sample Output

    1234567c

    Source

     

    ps:

    自己看懂下面的bitset类模版的操作表即可

    3-7  bitset操作

    b.any()

    b中是否存在置为1的二进制位?

    b.none()

    b中不存在置为1的二进制位吗?

    b.count()

    b中置为1的二进制位的个数

    b.size()

    b中二进制位的个数

    b[pos]

    访问b中在pos处的二进制位

    b.test(pos)

    b中在pos处的二进制位是否为1?

    b.set()

    b中所有二进制位都置为1

    b.set(pos)

    b中在pos处的二进制位置为1

    b.reset()

    b中所有二进制位都置为0

    b.reset(pos)

    b中在pos处的二进制位置为0

    b.flip()

    b中所有二进制位逐位取反

    b.flip(pos)

    b中在pos处的二进制位取反

    b.to_ulong()

    b中同样的二进制位返回一个unsigned long值

    os << b

    b中的位集输出到os流

    #include<stdio.h>
    #include<string.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #include<bitset>
    using namespace std;
    int main(){
        int n,x,y;
        while(scanf("%x,%d,%d",&n,&x,&y)!=EOF){
           bitset<32>q(n);
           q.reset(x);
           q.set(y);
           q.set(y-1);
           q.reset(y-2);
           printf("%x
    ",q.to_ulong());
        }
        return 0;
    }
  • 相关阅读:
    工作杠杆
    AngularJS 自定义指令directive 介绍
    CentOS卸载OpenJDK并安装Sun JDK
    jQuery Datatable 表格插件
    ZTree 使用范例
    jQuery UI 实例 – 切换(Toggle)
    curl 抓取页面信息
    报警平台
    PHP imagechar() 图形验证码 字体太小问题
    Discuz!在线中文分词服务
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/4766992.html
Copyright © 2011-2022 走看看