C/C++位操作实例总结

 更新时间:2014年08月19日 11:13:55   投稿:shichen2014  
这篇文章主要介绍了C/C++位操作实例总结,是C/C++程序设计中很重要的概念,需要的朋友可以参考下

本文详细叙述了C/C++的位操作,这是C/C++程序设计中非常重要的概念。本文实例对于C/C++初学者来说也具有很好的复习与参考价值。具体分析如下:

C/C++对位操作有如下方法:

一、位操作运算符(注意:下面几个运算符不改变原来的变量的值,只是获得运算的结果即一个新值)

按位取反:~

位与:&

位或:|

位异或:^

左移位运算符:<<

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
右移位运算符:>>

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
无符号右移运算符:>>>

>>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。

二、位字段

C++代码如下:

struct bits
{
  unsigned int a:1;
  unsigned int b:1;
  unsigned int c:10;
  unsigned int d:21;
};

位字段由一个结构声明,该结构声明为每个字段提供标签,并决定标签字段的宽度.

上面的使用unsigned int作为位字段结构的基本布局单元,因此即使一个结构只有一个一位的成员字段,该结构也和一个unsigned int的大小相同,上面用sizeof看为8,机器sizeof(unsigned int)为4,若把最后一个改为d:20,则本机器的sizeof刚好为4.

另外,十六进制前面加 0x,八进制前加 0

实例:写一个函数,返回将给定数字的后给定位数反转,即0变1,1变0

思路:是将整个数的全部位取反了,不合适.用异或^,把给定值和一个后面几位全部是1前面剩下的都是0的数^,即可.

本例关键是怎么获得那个后面几位全是1的数

#include <iostream>
using namespace std;
int invert_end(int num,int bits)  //第一个表示传进来的数值,第二个是让这个数值的后多少位反转
{
  int mask=0;  //此时全部位为0
  int temp=1;  //此时它的最后一位是1
  while (bits>0)
  {
    mask=mask|temp;  //或,每次只把1位置为1
    temp=temp<<1;  //它的唯一一个是1的位向左移
    bits--;
  }
  return num^mask;  //mask的后几位已经为1,异或即可
}

int main(void)
{
  cout<<sizeof(int)<<endl;
  int val;
  cout<<"输入一正整数:\n";
  cin>>val;
  int res=invert_end(val,3);
  cout<<val<<" "<<res;
  cin.get();
  return 0;
}

相关文章

  • 详解C++中的vector容器及用迭代器访问vector的方法

    详解C++中的vector容器及用迭代器访问vector的方法

    使用迭代器iterator可以更方便地解引用和访问成员,当然也包括vector中的元素,本文就来详解C++中的vector容器及用迭代器访问vector的方法,需要的朋友可以参考下
    2016-05-05
  • C语言递归系列的深入总结

    C语言递归系列的深入总结

    这篇文章主要给大家总结介绍了关于C语言递归系列的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 优先队列(priority_queue)的C语言实现代码

    优先队列(priority_queue)的C语言实现代码

    本文简要介绍一种基于数组二叉堆实现的优先队列,定义的数据结构和实现的函数接口说明如下
    2013-10-10
  • C语言实现冒泡排序的思路以及过程

    C语言实现冒泡排序的思路以及过程

    冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握。本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值
    2021-09-09
  • C++从一个文件夹中读出所有txt文件的方法示例

    C++从一个文件夹中读出所有txt文件的方法示例

    这篇文章主要给大家介绍了关于C++从一个文件夹中读出所有txt文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • c++ map索引不存在的key可能导致的后果分析

    c++ map索引不存在的key可能导致的后果分析

    这篇文章主要介绍了c++ map索引不存在的key可能导致的后果分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • c语言网络编程-标准步骤(比较简单)

    c语言网络编程-标准步骤(比较简单)

    这篇文章主要介绍了c语言网络编程-标准步骤(比较简单),需要的朋友可以参考下
    2014-01-01
  • 基于VC编写COM连接点事件的分析介绍

    基于VC编写COM连接点事件的分析介绍

    本篇文章是对VC编写COM连接点事件进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++实现乒乓球比分判定

    C++实现乒乓球比分判定

    这篇文章主要为大家详细介绍了C++实现乒乓球比分判定,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • c语言快速排序算法示例代码分享

    c语言快速排序算法示例代码分享

    快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)
    2014-02-02

最新评论