C/C++ 的位操作

一、位的概念


在计算机中,一字节占8位(现在的某些电脑也有占16位的),也即00000000-11111111。位就是里面的0和1。 
char c=100; 实际上c应该是01100100,正好是0x64。其中高位在前,低位在后。在某些计算机上面点大在后存储为0x46

 

二、位运算符:

&与,|或,~非,^异或,<<左移,>>右移 
&=自身与、|=自身或、~=自身非、^=自身异或 
例如: 
b=a<<3; 就是a的值左移两位并赋值为b。a本身的值并没有改变。等价于b=a*8; 
int num; 
if (num & 1 == 1); // 判断最后一位是否是1 
num >>= 1; 
num = num >> 1;    // num右移1位

 

三、常见操作

给num的第5位(最小是第0位)置1、或置0、或判断是否为1

1.第一种操作 
num |= (1<<5);  //给num第5位置1;因为跟1或=1;跟0或=不变 
num &= ~(1<<5); //给num第5位置0;因为跟0与=0;跟1与=不变 
num ^= (1<<5);  //给num第5位取反;因为跟1异或=1,跟0异或=不变 
num & (1<<5)    //=0表示第5位是0;!=0表示第五位是1 
num >> 5 & 1    //得到num第5位;

#define bit_set(num, pos) (num |= (1<<pos))  //给num第pos位置1
#define bit_clr(num, pos) (num &= !(1<<pos)) //给num第pos位置0
#define bit_rev(num, pos) (num ^= (1<<pos)) //给num第pos位取反
#define bit_que(num, pos) (num & (1<<pos)) //判断num的第pos是否为0;!=0就是1
#define bit_get(num, pos) (num >> pos & 1) //获得num的第pos位
阅读更多
文章标签: 存储 c
个人分类: 转帖好文
想对作者说点什么? 我来说一句

c++ 位操作 总结

2010年12月05日 90KB 下载

没有更多推荐了,返回首页

不良信息举报

C/C++ 的位操作

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭