golang 位运算

前端之家收集整理的这篇文章主要介绍了golang 位运算前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


<<
运算符 描述 实例
& 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。 (A & B) 结果为 12,二进制为 0000 1100
| 按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或 (A | B) 结果为 61,二进制为 0011 1101
^ 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (A ^ B) 结果为 49,二进制为 0011 0001
左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 A << 2 结果为 240 ,二进制为 1111 0000
>> 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。 A >> 2 结果为 15 ,二进制为 0000 1111

运算说明:

and运算&:

通常用于二进制的取位操作。一个数&1的结果就是取二进制的最末位。可以用来判断一个整数的奇偶。二进制最末位为0表示偶数,最末位为1表示奇数。

相同位的两个数字都为1,则结果为1,若有一个不为1,那么结果为0.

or 运算 | :

通常用于二进制特定位上的无条件赋值。一个数 | 1的结果就是把二进制的最末未强行变成1.如果需要把二进制最末位变成0,需要对这个数进行 | 1之后再减1.实际意义是把这个数强行变成最接近 的偶数。

相同位只要一个为1即为1


xor运算 ^
^(XOR) 在go语言中XOR是作为二元运算符存在的

但是如果是作为一元运算符出现,他的意思是按位取反。

1010的反码是0101:

解析:

1010在32位计算机存储为0000 1010

1.求补码 : 1010取反以后结果为 1111 0101 (在计算机中,首位为0代表正数,首位是1代表负数)

2. 求补码的逆: 先减1得:1111 0100 , 再取反(取反时符号位不变)得:0000 1011 ------计算结果为-11

XOR是不进位加法计算,也就是异或计算。0000 0100 + 0000 0010 = 0000 0110 = 6

异或的符号是^。按位异或运算,对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1,否则该位为0.
xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a xor b) xor b = a。
相同位不同则为1,相同则为0。

&^ 位清空

&^     位清空 (AND NOT)

和被运算变量位置有关系

左移<<

乘以2的n次方

右移>>

除以2的n次方

猜你在找的Go相关文章