2021-03-10

如何理解左移和右移

左移理解
左移就是:丢弃最高位,0补最低位(向高位移动)
例如
char i=1; //00000001
i=i<<2;//把i里面的值左移 00000100
(也就是10进制的4,所以说左移1位相当于乘以2的n次方)有符号数不完全适用
这里i的二进制位数与定义i的类型有关,
右移理解
右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变(向低位移动)
例如:
int i=0x80000000;
i=i>>1;//i的值不会变成0x40000000,而会变成0xc0000000;
就是说,符号位右移动后,正数的话补0,负数补1,就是汇编语言中的算术右移,同样当移动的位数超过类型长度,会取余数,然后移动余数个数。

二,位操作的实际应用

(1)特定位清零用&
例如:将0Xaaaaaaaa的bit8~bit15清零,其它位保持不变。
分析:unsigned int a=0xAAAAAAAA;
unsigned int b=0xFFFF00FF;
unsigned int c;
c=a&b;
printf(“c=0x%x”,c) //c=0xaaaa00aa
(2)特定位置1用 |
例如:将0xffff00ff的bit8 ~bit15置1,其他位保持不变。

   unsigned int a = 0xffff00ff;
              unsigned int b = 0x000ff00;
              unsigned int c;
              c = a | b;
              printf("c = 0x%x ", c);    // = 0xffffffff
 (3)特定位取反用^
       例如:将0xffff00ff的bit8 ~bit15取反,其余保持不变

unsigned int a = 0xffff00ff;
unsigned int b = 0xff00;
unsigned int c;
c = a ^ b;
printf("c = 0x%x ", c); // = 0xffffffff

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值