C语言位操作

二进制整数:
一个字节8个位
一个二进制数 0 1 0 0 1 0 0 1
位号 7 6 5 4 3 2 1 0
第7位是高位,第0位是低位
一个字节可以存储的数范围是0–255,一共256个值,也可以是 -128–127

八进制:
每个八进制对应3个二进制位
十六进制
每个十六进制位对应4个二进制位,用A标志10,F表示15,大小写不分

位逻辑运算符(~,|,&,^)
常规逻辑运算符(&&,||,!=)

按位取反(~) ~(10010010) —> 01101101
按位与(&) (10010010) & (10101010) ----> (10000010) 两个位都为1运算后位才为1
按位或(|) (10010010) | (10101010) ----> (10111010) 两个位有一个1运算后该位就为1
按位异或(^) (10010010) ^ (10101010) ----> (00111000) 两个位有一个位为1就为1,两个位为1就为0

掩码:
&运算符通常来完成掩码的操作,掩码是为某些位设为1或者0的位组合
flag = 10010110
mask = 00000010
flag &= mask;
flag = 00000010
这个语句将会使flag除了第1位其余位全部为0

打开位,使某位为1,通常与 | 一起使用

flag = 10010100
mask = 00000010
flag |= mask;
flag = 10010110  使第1位为1,其余位不变

关闭位,使某位为0

~mask = 11111101
flag = flag & ~mask = 10010100
1&1=1,1&0=0,上述操作关闭了第1位

转置位,使1->0,0->1;
1^0=1;
1^1=0;

flag = 10010100
mask = 10010100
flag ^= mask;
flag = 00000000 // 使flag的打开位全部关闭

查看某位的值

flag = 10010100;  
mask = 10000000;
if((flag & mask)== mask);
如果上述成立则位7位1,不成立则为0

左移 <<
(10001010) << 2;//左移两位,移除的2个高位舍弃,低位补0
(00101000)

flag = 10001010;
flag <<= 2;
flag = 00101000;

右移 >>
(10001010) >> 2;//右移两位,移除的2个低位舍弃,高位补0
(00100010)

flag = 10001010;
flag >>= 2;
flag = 00100010;

移位运算符
number << n; number乘2的n次幂
number >> n; number除以2的n次幂(number非负)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值