二进制

作者: 吴世浩 | 来源:发表于2018-12-26 16:14 被阅读22次

    一、好言

    当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。

    二、位运算

    var x uint8 = 1<<1 | 1<<5
    var y uint8 = 1<<1 | 1<<2
    fmt.printf("%08b\n",x&y) //"00000010"
    fmt.printf("%08b\n",x|y) //"00100110"
    fmt.printf("%08b\n",x^y) //"00100100"
    fmt.printf("%08b\n",x&^y) //"00100000"
    
    fmt.printf("%08b\n",x<<1) //01000100
    fmt.printf("%08b\n",x<<1) //00010001
    
    
    2、1 与运算

    & 运算用于二进制的取位计算,如果相同的两个数字都为1,则为1;如果有一个不为1,则为0

    00100010
    &
    00000110


    00000010

    2、2 或运算

    |运算计算规则是相同位只要一个为1,则为1
    00100010
    |
    00000110


    00100110

    2、3 异或运算

    ^ 运算故则是相同位不同,则位1,相同同则位0

    ^运算的逆运算是它本身,两次异或同一个数据最后得到的结果是其本身。

    00100010
    ^
    00000110


    00100100

    2、4 &^

    位操作运算符&^用于按位置零(AND NOT):如果对应y中bit位为1的话, 表达式z = x &^ y结果z的对应的bit位为0,否则z对应的bit位等于x相应的bit位的值。

    00100010
    ^
    00000110


    00100000

    2、5 左移
    00100010
    0100010
    

    00100010 左移一位后变成0100010,所以右边空缺一位,那么用0补充。

    2、6 右移
     00100010
      0010001
    
    00100010右移后变成0010001,所以左边缺一位,用0补充;
    

    x<<n 和x>>n移位运算中,决定了移位操作bit数部分必须是无符号数;被操作的x数可以是有符号或无符号数。算术上,一个x<<n左移运算等价于乘以2的n次方,一个x>>右移运算等价于除以2的n次方。
    左移运算用零填充右边空缺的bit位,无符号数的右移运算也是用0填充左边空缺的bit位,但是有符号数的右移运算会用符号位的值填充左边空缺的bit位。因为这个原因,最好用无符号运算,这样你可以将整数完全当作一个bit位模式处理。

    相关文章

      网友评论

          本文标题:二进制

          本文链接:https://www.haomeiwen.com/subject/nquhlqtx.html