关闭

C/C++ 的位操作

标签: 存储c
768人阅读 评论(0) 收藏 举报
分类:

一、位的概念


在计算机中,一字节占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位

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:318763次
    • 积分:3852
    • 等级:
    • 排名:第8265名
    • 原创:49篇
    • 转载:103篇
    • 译文:0篇
    • 评论:70条
    最新评论