Chinaunix首页 | 论坛 | 博客
  • 博客访问: 832629
  • 博文数量: 97
  • 博客积分: 3042
  • 博客等级: 中校
  • 技术积分: 1610
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-21 11:48
文章存档

2015年(1)

2014年(3)

2013年(4)

2012年(43)

2011年(44)

2010年(2)

分类: LINUX

2012-03-30 15:35:16

 
  • 41. 取反(~):变10,变01,比如:~(10011010) = 01100101

    与运算AND&):遇00,比如:(10010011) & (00111101) = 00010001

    或运算OR|):遇11,比如:(10010011) | (00111101) = 10111111

    异或运算(^):相同则为0,遇1则反,比如:(10010011) ^ (00111101) = 10101110

    142. 掩码:运用AND运算保留特定位的值,其它位清零。flags = flags & MASK

  • 运用OR运算打开位:打开一个值中特定的位,同时保持其他位不变。flags = flags | MASK

    关闭位:不影响其它位,同时能够将特定的位关闭。flags = flags & ~MASK或者flags &= ~MASK

    转置位:转置一个位表示如果该位打开,则关闭该位;如果该位关闭,则打开该位。如果使用异或将一个值与掩码组合,那么该值中对应掩码位为1的位被转置,对应掩码位为0的位不改变。比如:

    flag = flag ^ MASK;

    查看一位的值

    if (( flag & MASK) == MASK)

               puts (“wow!”);

    143. 左移<<:将其左侧操作数的值的每 位向左移动,移动的位数由其右侧操作数指定。空出的位用0填充,并且丢弃移出左侧操作数末端的位,相当于乘以2的次幂。比如:(10001010) << 2,结果为(00101000)

    右移>>:将其左侧操作数的值的每位向右移动,移动的位数由其右侧操作数指定,丢弃移出左侧操作数右端的位,如果数值非负,则相当于除以2的次幂。对于unsigned类型,使用0填充左端空出的位。对于有符号类型,结果依赖于机器,空出的位可能用0填充,或者使用符号(最左端的)位的副本填充:

    (10001010) >> 2,结果可能为(00100010),也可能为(11100010)

    对于无符号值:

    (10001010) >> 2,结果为(00100010)

     



 

阅读(2419) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~