2013年11月26日 星期二

golang 二进制操作

以前很少对二进制进行操作,在看effective go的时候,好像没有看到关于二进制操作符的说明.今天在看其他源码的时候,看到一些二进制操作符,不知道他的意思,所以就查查资料,温习一下.
  1.  按位或 |
.| (按位或):【解义】对两个整数的二进制形式逐位进行逻辑或运算,原理为:1|0=1,0|0=0,1|1=1,0|1=1 等。 4|-5: 4的二进制形式为:00000000 00000000 00000000 00000100, -5的二进制形式为:11111111 11111111 11111111 11111011, 逐位进行逻辑或运算:11111111 11111111 11111111 11111111,即得到-1.   2. &(按位与) 【解义】对两个整数的二进制形式逐位进行逻辑与 运算,原理:1|0=0,0|0=0,1&1=1;0&1=0等。 4&-5: 4的二进制形式为:00000000 00000000 00000000 00000100, -5的二进制形式为:11111111 11111111 11111111 11111011, 逐位进行逻辑与运算:00000000 00000000 00000000 00000000,即得到0. 实际应用:可以把字节转换为整 数,-64&0xFF=192,也可以用八进制的形式,-64&0377=192、 其实0xFF和0377都表示的是整数255、 3.^(按 位异或) 【解义】对两个整数的二进制形式逐位进行逻辑异或运算,原理:1^1=0,1^0=1,0^1=1,0^0=0. 4^-5: 4的二进制形式为:00000000 00000000 00000000 00000100, -5的二进制形式为:11111111 11111111 11111111 11111011, 逐位进行逻辑异或运算:11111111 11111111 11111111 11111111,即得到-1. 实际应用:按位异或可以比较两个数字是否相等,它利用 1^1=0,0^0=0的原理。  20^20==0