C/C++ 的位操作

本文深入讲解计算机中的位概念,详细介绍位运算符的功能及使用方法,并提供了常见位操作的实例代码,帮助读者掌握位运算技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、位的概念


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值