C/C++位操作实例总结
C/C++位操作实例总结
发布时间:2016-12-28 来源:查字典编辑
摘要:本文详细叙述了C/C++的位操作,这是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语言学习
热门C语言学习
编程开发子分类