gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章C/C++位操作实例总结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

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

按位取反:~ 。

位与:& 。

位或:| 。

位异或:^ 。

左移位运算符:<< 。

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

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

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

2、位字段 。

C++代码如下

?
1
2
3
4
5
6
7
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的数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#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/C++位操作实例总结的文章就讲到这里了,如果你想了解更多关于C/C++位操作实例总结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com