C/C++ 的位操作

转载 2011年01月22日 20:06:00

一、位的概念


在计算机中,一字节占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++位操作简介--移位、位与、位或、异或

首先,计算机内部是以补码形式表示(参见:http://www.cnblogs.com/tenghoo/archive/2008/06/01/1211663.html)的,而且c移位操作采取补0还是补符...

C/C++中的位操作运算

一直对位运算的操作理解不是很深刻,偶然看到一篇博客,感觉豁然开朗。资料来源: http://blog.csdn.net/masefee/archive/2010/01/26/5258432.aspx ...

C/C++位操作技巧 【转载】

检测一个无符号数是不为2^n-1(^为幂):   x&(x+1)          将最右侧0位改为1位:   x   |  ...
  • mkhgg
  • mkhgg
  • 2012-02-06 10:53
  • 1269

内核中的基本C库函数 位操作

位操作 set_bit 在位图中原子地设置某一位 void set_bit (int nr, volatile void * addr) nr为要设置的位,addr为位图的起始地址 ...

C++按位操作

  • 2012-12-06 15:59
  • 787B
  • 下载

C 位操作 详解

一、位运算: |  按位或操作符:result=exp1|exp2;当exp1和exp2中对应位中至少有一个为1时,result中对应位为1,否则为0。 & 按位与操作符::result=exp1...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)