• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    11个月前 (04-08)  技巧 |   1 条评论  47 
    文章评分 0 次,平均分 0.0

    基础

    位操作符

    符号 含义 规则
    & 两个位都为1时,结果为1
    | 有一个位为1时,结果为1
    ^ 异或 0和1异或0都不变,异或1则取反
    ~ 取反 0和1全部取反
    << 左移 位全部左移若干位,高位丢弃,低位补0
    >> 算术右移 位全部右移若干位,,高位补k个最高有效位的值
    >> 逻辑右移 位全部右移若干位,高位补0

    注意:

    1、位运算只可运用于整数,对于float和double不行。

    2、另外逻辑右移符号各种语言不太同,比如java是>>>。

    3、位操作符的运算优先级比较低,尽量使用括号来确保运算顺序。比如1&i+1,会先执行i+1再执行&。

     

    应用实例

    很棒的应用实例,你可以mark一下,方便以后对照使用。

    1、混合体

    位运算实例

    位运算 功能 示例
    x >> 1 去掉最后一位 101101->10110
    x << 1 在最后加一个0 101101->1011010
    x << 1 | 1 在最后加一个1 101101->1011011
    x | 1 把最后一位变成1 101100->101101
    x & -2 把最后一位变成0 101101->101100
    x ^ 1 最后一位取反 101101->101100
    x | (1 << (k-1)) 把右数第k位变成1 101001->101101,k=3
    x & ~ (1 << (k-1)) 把右数第k位变成0 101101->101001,k=3
    x ^(1 <<(k-1)) 右数第k位取反 101001->101101,k=3
     x & 7 取末三位 1101101->101
    x & (1 << k-1) 取末k位 1101101->1101,k=5
    x >> (k-1) & 1 取右数第k位 1101101->1,k=4
    x | ((1 << k)-1) 把末k位变成1 101001->101111,k=4
    x ^ (1 << k-1) 末k位取反 101001->100110,k=4
    x & (x+1) 把右边连续的1变成0 100101111->100100000
    x | (x+1) 把右起第一个0变成1 100101111->100111111
    x | (x-1) 把右边连续的0变成1 11011000->11011111
    (x ^ (x+1)) >> 1 取右边连续的1 100101111->1111
    x & -x 去掉右起第一个1的左边 100101000->1000
    x&0x7F 取末7位 100101000->101000
    x& ~0x7F 是否小于127 001111111 & ~0x7F->0
    x & 1 判断奇偶 00000111&1->1

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/5468.html

    关于

    发表评论

    1. x&-x好评!但是解释好像不对吧……是取到右边第一个1

      w703710691d 评论达人 LV.2 8个月前 (07-06) [0] [0]
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享