当前位置: 首页 > 编程笔记 >

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

堵乐
2023-03-14
本文向大家介绍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# DatagridView常用操作汇总,包括了C# DatagridView常用操作汇总的使用技巧和注意事项,需要的朋友参考一下 本文汇总了C#中DatagridView的常用操作,有助于读者加深对C# DatagridView用法的理解,具体如下: 1、(最基本的技巧)、获取某列中的某行(某单元格)中的内容 2、自定义列     继承 DataGridViewTextBoxCe

  • 本文向大家介绍C#数据库操作类AccessHelper实例,包括了C#数据库操作类AccessHelper实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#数据库操作类AccessHelper。分享给大家供大家参考。 具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍C#使用listView增删操作实例,包括了C#使用listView增删操作实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用listView增删操作的方法。分享给大家供大家参考。具体分析如下: 应用场景: C#中使用listView控件,实现动态添加,选中删除等操作. 实例代码: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍C#之Socket操作类实例解析,包括了C#之Socket操作类实例解析的使用技巧和注意事项,需要的朋友参考一下 本文展示了一个C#的Socket操作类的完整实例,并附带了用法说明,分享给大家供大家参考之用。具体方法如下: 主要功能代码如下: 用法说明: 每个接收的方法都对应着有发送方法 如: 发送方法: 接收方法: 不知道发送文本长度: 发送方法: 接收方法: 希望本文所述实例对大

  • 本文向大家介绍C#实现的Excel文件操作类实例,包括了C#实现的Excel文件操作类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现的Excel文件操作类。分享给大家供大家参考,具体如下: 更多关于C#相关内容感兴趣的读者可查看本站专题:《C#操作Excel技巧总结》、《C#程序设计之线程使用技巧总结》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构

  • 本文向大家介绍C#的FileInfo类实现文件操作实例,包括了C#的FileInfo类实现文件操作实例的使用技巧和注意事项,需要的朋友参考一下 C#的FileInfo类提供了与File类相同的功能,不同的是FileInfo提供的都是成员方法,使用示例如下所示: 1、读文件: 2、写文件: 3、追加内容: 4、打开文件: 5、复制、移动、替换: 6、加密解密、删除: 7、获得文件属性: 在FileI