一、位运算符

位运算符对整数在内存中的二进制位进行操作。

运算符 描述
& 参与运算的两数各对应的二进位相与。 (两位均为1才为1)
| 参与运算的两数各对应的二进位相或。 (两位有一个为1就为1)
^ 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两位不一样则为1)
<< 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。
>> 右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。

二、示例

2.1 &

参与运算的两数各对应的二进位相与。 (两位均为1才为1)

示例:

package main

import "fmt"

func main() {
n1 := 13 //二进制为1101
n2 := 3 //二进制为11
//两个对应的二进制位都为1才为1
fmt.Println(n1 & n2)
}

执行结果:

解释:

首先13二进制为1101,3二进制为11

因为两位均为1才为1,所以自右至左、自上而下:

1和1都为1,0和1其中一个为0不全为1所以为0,1和空不全为1所以为0,1和空不全为1所以为0,所以最终相与得0001转化为10进制为1

2.2 |

参与运算的两数各对应的二进位相或。 (两位有一个为1就为1)

示例:

package main

import "fmt"

func main() {
n1 := 13 //二进制为1101
n2 := 3 //二进制为11
//两个对应的二进制位有1个为1就为1
fmt.Println(n1 | n2)
}

执行结果:

解释:

因为两位有1个为1就为1,所以自右至左、自上而下:

1和1都为1,0和1有1个为1所以为1,1和空有1个为1所以为1,1和空有1个为1所以为1,所以最终相与得1111转化为10进制为15

2.3 ^

参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两个对应的二进制位不一样则为1)

示例:

package main

import "fmt"

func main() {
n1 := 13 //二进制为1101
n2 := 3 //二进制为11
//两个对应的二进制位不一样则为1
fmt.Println(n1 ^ n2)
}

执行结果:

解释:

解释:

因为两位不一样就为1,所以自右至左、自上而下:

1和1两位一样所以为0,0和1两位不一样所以为1,1和空两位不一样所以为1,1和空两位不一样所以为1,所以最终相异或得1110转化为10进制为14

2.4 <<

左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。

注意:不论是左移还是右移,都是二进制位操作,我们这里的1也是二进制1

比如 1 << 10

具体操作原理如下:

根据原理计算方法:左移10位后,二进制为10000000000,转化为10进制为后为1024

套用公式计算方法:1*2^10=1024

代码示例:

package main

import "fmt"

func main() {
fmt.Println(1 << 10)
}

执行结果:

巩固:

3 << 2

首先3的二进制为11,左移2位变成1100,然后将1100转换为10进制位12

代码示例:

package main

import "fmt"

func main() {
fmt.Println(3 << 2)
}

执行结果:

2.5 >>

右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。

注意:右移走的就相当于抛弃了,剩余的二级制位就是最终所得

例1:

3 >>1

答:

3的二进制为11,右移1位,1个1被右移了,相当于被抛弃了,剩余的1就是最终的二进制位。将其转换为10进制还是为1

例2:

3 >> 2

答:

3的二进制为11,右移1位,2个1被右移了,相当于被抛弃了,剩余的空(默认为0)就是最终的二进制位。将其转换为10进制还是为0

例3:

13 >>2

答:

13的二进制为1101,右移2位,0和1被右移了,相当于被抛弃了,剩余的11就是最终的二进制位。将其转换为10进制还是为3

代码示例验证:

package main

import "fmt"

func main() {
fmt.Println(13 >> 2)
}

执行结果如下:

2.2 Go语言基础之位运算操作的更多相关文章

  1. C语言基础知识--位运算

    1.原码,反码,补码: (1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负:其余n-1位为数值位,各位的值可为零或一.当真值为正时,原码.反码.补码数值位 完全相同:当真值为负时, ...

  2. 深入理解计算机系统(2.2)---布尔代数以及C语言上的位运算

    布尔代数上的位运算 布尔代数是一个数学知识体系,它在0和1的二进制值上演化而来的. 我们不需要去彻底的了解这个知识体系,但是里面定义了几种二进制的运算,却是我们在平时的编程过程当中也会遇到的.这四种运 ...

  3. C语言中的位运算和逻辑运算

    这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...

  4. C/C++语言中的位运算

    在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作. 一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率.C语 ...

  5. C语言中的位运算的技巧

    一.位运算实例 1.用一个表达式,判断一个数X是否是2的N次方(2,4,8,16.....),不可用循环语句. X:2,4,8,16转化成二进制是10,100,1000,10000.如果减1则变成01 ...

  6. java基础之位运算

    java中常见的位运算符:&(逻辑与) |(逻辑或) ~(取反) ^(逻辑异或) >>(右移) <<(左移) >>>(无符号右移) &(逻辑与 ...

  7. java ----> 基础之位运算

    package test.ant; import java.util.Arrays; import java.io.UnsupportedEncodingException; public class ...

  8. #C语言初学记录(位运算)

    位运算 Problem Description7-1 数组元素循环右移问题 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由 ...

  9. 「C基础」位运算

    0. 原码.补码.反码 初学者只做了解即可 见 张子秋的博客 无论正负数,在内存中存储的都是补码 正数:反码 == 原码 == 补码 负数:反码 == ~原码 补码 == 反码+1 1. & ...

随机推荐

  1. AOP底层实现原理,动态代理如何动态

    代理 指定另外一个主体代替原来的某个主体去执行某个事物 代理执行的人 需要代理的人 需要代理的事情是一定要做的 但是被代理的人没有时间或自己做的不专业 静态代理: 父母朋友帮忙物色找对象 代理人掌握需 ...

  2. CentOS系统 Amoeba+MySql主从读写分离配置 适合新手傻瓜式教程!-----仅供参考!

    废话不说,直接开始: 一.安装mysql的三种方式,这里采用第2种(安装方式不再详解,请参照) http://www.cnblogs.com/babywaa/articles/4837946.html ...

  3. java_变量和常量

    一.变量(可以改变的量) 1.命名规则: a.遵循标识符命名规则: 1.关键字是不能用作标识符的 2.区分大小写 3.可以包含数字.字母.下划线.美元符号$,但是不能以数字作为开头 b.尽量使用有意义 ...

  4. (a ==1 && a== 2 && a==3) 有可能是 true 吗?

    今天看到这个题目,感到很有意思,查找了些资料,各位牛人果然有高招解决: 方法一: var a = { i: 1, toString: function () { return a.i++; } } i ...

  5. Linux文件系统之删除文件、文件夹(rm,rmdir)

    rm命令,rmdir命令 rm命令Remove,功能:1)删除目录,2)删除文件.  (可以递归的删除指定目录的所有文件及子目录) 注意:rm是一个危险的命令,使用的时候要特别当心,尤其对于初学者来说 ...

  6. Python3-list

    list = ['abcd', 786, 2.23, 'runoob', 70.2] tinylist = [123, 'runoob'] print(list) # 输出完整列表 print(lis ...

  7. 51nod 1989 竞赛表格 (爆搜+DP算方案)

    题意 自己看 分析 其实统计出现次数与出现在矩阵的那个位置无关.所以我们定义f(i)f(i)f(i)表示iii的出现次数.那么就有转移方程式f(i)=1+∑j+rev(j)=if(j)f(i)=1+\ ...

  8. 【leetcode】1295. Find Numbers with Even Number of Digits

    题目如下: Given an array nums of integers, return how many of them contain an even number of digits. Exa ...

  9. 写出一条SQL语句:取出表A中第31到40行记录(SQLserver,以自增长的ID作为主键,注意: 一条Sql语句:取出表A中第31到第40记录

    解1: select top 10 * from A where id not in (select top 30 id from A) 解2: select top 10 * from A wher ...

  10. JAVA实现四则运算的简单计算器

    开发环境eclipse java neon. 今天用JAVA的swing界面程序设计制作了一个四则运算的简易计算器.代码以及截图如下: computer.java: ///////////////// ...