二进制

一、好言

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

二、位运算

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位模式处理。

推荐阅读更多精彩内容

  • 简介 关于进制,我们平时接触的最多的就是十进制,用于计数。除了常用十进制,比较常用的还有跟时间相关的进制,比如七进...
    高鸿祥阅读 2,592评论 0 4
  • 带着问题学习(二进制数据) 32位是几个字节? 01011100对应的十进制是多少? 00001111左移两位结果...
    yishurensheng阅读 522评论 0 1
  • 原因 cpu本质就是个电子器件,它有很多很多引脚,每个引脚只有直流电压0v或5v两个状态,也就是二进制中的0和1,...
    a乐乐_1234阅读 479评论 0 0
  • 早上很早就被芮芮吵醒了,结果赖床到9点半才起来。吃过早饭,没事干的时候,就教了芮芮折千纸鹤,稍后又带他到小广场轮滑...
    朝歌晚舞阅读 40评论 0 0
  • 文/甜点 01、 五一小长假余额不足的此刻,你是否在焦虑明天早起上班的悲剧?又或是论文到了dealine而你只字未...
    思甜_根号2阅读 606评论 3 3