一、位运算符

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

运算符 描述
& 参与运算的两数各对应的二进位相与。 (两位均为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. 使用Leangoo玩转故事地图

    转自:https://www.leangoo.com/9944.html 用户故事是在敏捷开发中表达需求的主要方式,我们在做敏捷开发的时候都有需求池的概念,在Scrum中这个需求池就是产品backlo ...

  2. DX使用随记--ImageComboBoxEdit

    1. 增加按钮: Combo_订单类型.Properties.Items.Clear()Select Case Combo_客户名称.EditValue Case "ABC" Co ...

  3. Spring cloud实战——服务提供者

    目录讲解: 一.服务提供者与服务消费者的概念 二.编写一个服务提供者的测试类(code) 1.1. 使用微服务构建的是分布式系统,微服务之间通过网络进行通信.我们使用微服务提供者与服务消费者来描述微服 ...

  4. shiro系列三、定义Realm

    自定义realm: /** * 认证和授权 */ @Component public class UserRealm extends AuthorizingRealm { @Autowired pri ...

  5. Django基础(一):基础引用

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...

  6. (十四)Android NDK混淆

    1.ollvm下载编译 我的是macbook环境. 参考obfuscator官网:https://github.com/obfuscator-llvm/obfuscator/wiki 执行下面的命令下 ...

  7. 将excel表格导入到DataGridView

    using System.Data.OleDb; 添加一个button控件,一个textBox控件,用于显示选择路径  private void loadxls() { String fileName ...

  8. StringBuffer常用方法

    StringBuffer常用的方法 package com.mangosoft.java.string; /** * 字符串特点:字符串是常量,它们的值在创建之后不能更改. * * 字符串的内容一旦发 ...

  9. 如何在SpringBoot的 过滤器之中注入Bean对象

    我建立一个全局拦截器,此拦截器主要用于拦截APP用户登录和请求API时候,必须加密,我把它命名为SecurityFilter,它继承了Filter,web应用启动的顺序是:listener->f ...

  10. FFmpeg常用命令学习笔记(八)滤镜相关命令

    滤镜相关命令 FFmpeg中关于滤镜命令有很多种.比如在视频中加入/删除水印.对视频做反转等等都属于滤镜. FFmpeg滤镜处理流程 解码后的数据帧 ---过滤处理---> 过滤后的数据帧 -- ...