关闭

常见的位操作

标签: 位操作
120人阅读 评论(0) 收藏 举报
分类:

位操作有非常多种,这里列出常见的几种位操作:

获取

获取变量某一位的值,例如变量为 00001000, 获取改变量第四位的值(从低到高),为1.
方法如下:将1左移 3 位, 得到 1000, 再将这个值与变量做与操作,检查该结果是否为0,若为0则说明该位的值为0,否则为1.
代码如下:

bool getBit(int num, int i){
    return ((num & (1 << (i - 1))) != 0);
}

置位

将变量某一位的值置0或1:将1左移动 i - 1 位, 假设得到 1000, 与变量做或操作 可将变量该位置1,
若要置0, 先将 1000 取反 得到 0111, 再与变量做与操作 可将变量该位置0.
代码如下:

int setBit(int num, int i){
    //置1
    return num | (1 << (i - 1));
    //置0
    // return num & ~(1 << (i - 1));
}

将变量最高位至i位清零

将1左移 i - 1 位, 假设取 i = 3, 得到 100, 将100 - 1 得到 011, 将变量与011做与操作,即完成
代码如下:

int clearBit(int num, int i){
    int mask = (1 << (i - 1)) - 1;
    return num & mask;
}

将i位至1位清零

代码如下

int clearBit(int num, int i){
    int mask = ~((1 << (i - 1)) - 1);
    return num & mask;
}

将i位至j位清零

思路很简单, 得到 11110···01111的数 与原变量做与操作即可,起始0为第i位 结尾0 为第j位。
代码如下:

int clearBit(int num, int i, int j){
    int mask = 1;
    for(int k = 0; k <= j - i; ++k){
        //得到变量 mask = 11···11, 长度为 j - i + 1
        mask |= mask << 1;
    }
    //左移 i 个长度
    mask = mask << (i - 1);
    return num & ~mask;
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

SVN学习(三)-常用操作

上篇博客"SVN学习(二)-下载与安装"详细的赘述了SVN的下载以及安装的详细步骤,这篇博客咱们对需要熟知的图标以及常用的操作进行一个基础性的介绍。 一、图标的认识: ...
  • u010282984
  • u010282984
  • 2017-02-23 15:59
  • 1184

mysql 常用操作(整理)

1       登录数据库 格式: mysql -h主机地址 -u用户名 -p用户密码–P端口 –D数据库–e “SQL 内容” >mysql -uroot -p 数据库名称 2   &#...
  • lxh090821
  • lxh090821
  • 2013-07-22 16:37
  • 23488

《(自己整理)操作系统常见面试题》

《操作系统》知识点大纲 线程间通信   进程间通信   进程空间   内核态,用户态 ============================================== 多...
  • lsx_123_
  • lsx_123_
  • 2014-12-07 23:37
  • 3479

如何获取byte的各个bit值以及常见位操作

如何获取byte的各个bit值以及常见位操作 https://www.cnblogs.com/Joanna-Yan/p/5080935.html 项目中通过信号采集板的数据获取车上仪表...
  • dlf1769
  • dlf1769
  • 2017-12-28 08:56
  • 27

两个常见位操作面试题:不用加减乘除运算符计算两数之和及a=b*3

转自http://blog.csdn.net/morewindows/article/details/8710737 上一篇《位操作基础篇之位操作全面总结》(http://blog.csdn.net...
  • zhizunwudi
  • zhizunwudi
  • 2013-05-22 11:08
  • 684

两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3

《两个常见位操作面试题不用加减乘除运算符计算两数之和及a=b*3》地址:http://blog.csdn.net/morewindows/article/details/8710737转载请标明出处,...
  • MoreWindows
  • MoreWindows
  • 2013-03-24 10:22
  • 16213

位操作点亮一个led

  • 2014-08-11 23:15
  • 616B
  • 下载

C51单片机程序-加了新遥控程序IO口位操作写得好.rar

  • 2012-12-01 16:25
  • 9.47MB
  • 下载

PB位操作函数

  • 2012-04-01 21:28
  • 114KB
  • 下载

头文件,位操作

  • 2014-03-28 18:05
  • 5KB
  • 下载
    个人资料
    • 访问:4150次
    • 积分:2
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条
    文章分类