2.2 Go语言基础之位运算操作
一、位运算符
位运算符对整数在内存中的二进制位进行操作。
| 运算符 | 描述 |
|---|---|
| & | 参与运算的两数各对应的二进位相与。 (两位均为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语言基础之位运算操作的更多相关文章
- C语言基础知识--位运算
1.原码,反码,补码: (1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负:其余n-1位为数值位,各位的值可为零或一.当真值为正时,原码.反码.补码数值位 完全相同:当真值为负时, ...
- 深入理解计算机系统(2.2)---布尔代数以及C语言上的位运算
布尔代数上的位运算 布尔代数是一个数学知识体系,它在0和1的二进制值上演化而来的. 我们不需要去彻底的了解这个知识体系,但是里面定义了几种二进制的运算,却是我们在平时的编程过程当中也会遇到的.这四种运 ...
- C语言中的位运算和逻辑运算
这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...
- C/C++语言中的位运算
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作. 一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率.C语 ...
- C语言中的位运算的技巧
一.位运算实例 1.用一个表达式,判断一个数X是否是2的N次方(2,4,8,16.....),不可用循环语句. X:2,4,8,16转化成二进制是10,100,1000,10000.如果减1则变成01 ...
- java基础之位运算
java中常见的位运算符:&(逻辑与) |(逻辑或) ~(取反) ^(逻辑异或) >>(右移) <<(左移) >>>(无符号右移) &(逻辑与 ...
- java ----> 基础之位运算
package test.ant; import java.util.Arrays; import java.io.UnsupportedEncodingException; public class ...
- #C语言初学记录(位运算)
位运算 Problem Description7-1 数组元素循环右移问题 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由 ...
- 「C基础」位运算
0. 原码.补码.反码 初学者只做了解即可 见 张子秋的博客 无论正负数,在内存中存储的都是补码 正数:反码 == 原码 == 补码 负数:反码 == ~原码 补码 == 反码+1 1. & ...
随机推荐
- 用最简单的代码写出banner图轮播效果
以下视频是由[赵一鸣随笔]博客提供的“用最简单的代码写出banner图轮播效果”. 查看全屏高清视频,请点击链接:http://www.zymseo.com/58.html
- 【python】Logging模块
1.日志记录级别 logging.debug<logging.info<logging.warning<logging.error<logging.critical 关键是最高 ...
- insmod: can't insert 'xxx.ko': unknown symbol in module, or unknown parameter
手动加载内核模块时候,报如下错误信息 insmod: can't insert 'xxx.ko': unknown symbol in module, or unknown parameter 问题原 ...
- 简单易用的PIL,教你如何使用python实现自动化截屏
Python有个第三方模块叫做PIL是Python Imaging Library的缩写,是用来进行图像处理的,比如,改变图片颜色,图片缩放,图片裁剪等等基本图片操作.它还包含一个截屏的功能. 从以上 ...
- Visual Studio中使用GitHub
一.简介 GitHub被微软收购后免费开放了私人仓库,这对个人或小型团队来说简直是福音.GitHub高效免费,无论是团队代码管理还是DevOps都不再话下,特别是对于想要开放研究成果提高知名度的团队或 ...
- 工具---《.264视频 转成 MP4视频》
<.264视频 转成 MP4视频> 安装了“爱奇艺万能播放器”可以打开.264视频,但是opencv却不能直接读取.264视频,还是需要想办法“.264视频 转成 MP4/avi视频”. ...
- ftp上传文件和下载文件
public class FtpService { #region Fields and attributes private readonly int BufLen = 2048; /// < ...
- 简单的理解 StringBuffer/StringBuilder/String 的区别
StringBuffer/StringBuilder/String 的区别 这个三类之间主要的区别:运行速度,线程安全两个方面. 速度方面(快到慢): StringBuilder > Strin ...
- nginx+tomcat遇到的https重定向到http问题
nginx做反向代理时,需要把请求头信息一起发送给tomcat,不然tomcat中的域名绑定就无法发挥作用了. 今天又遇到https请求被拦截器重定向到登陆页居然变成http的问题,导致小程序无法访问 ...
- 第四届西安邮电大学acm-icpc校赛 流浪西邮之寻找火石碎片 多体积条件背包
题目描述 众所周知,由于木星引力的影响,世界各地的推进发动机都需要进行重启.现在你接到紧急任务,要去收集火石碎片,重启西邮发动机.现在火石碎片已成为了稀缺资源,获得火石碎片需要钱或者需要一定的积分.火 ...