Golang的位运算操作符的使用
& 位运算 AND
| 位运算 OR
^ 位运算 XOR
&^ 位清空 (AND NOT)
<< 左移
>> 右移
感觉位运算操作符虽然在平时用得并不多,但是在涉及到底层性能优化或者使用某些trick的时候还是比较有意思。
&(AND) |(OR) 就不提了最常用的东西 会编程就会。
&操作的话是当 两个数需要同时为1的时候才会保留。 例如 0000 0100 & 0000 1111 => 0000 0100 => 4
| 操作的话是当 两个数同时为1或者1个为1一个不为1的时候会保留。 例如 0000 0100 | 0000 1111 => 0000 1111 => 15
^(XOR) 在go语言中XOR是作为二元运算符存在的:
但是如果是作为一元运算符出现,他的意思是按位取反,例如
package main
import "fmt"
func main() {
x :=
fmt.Println(^x)
}
output: -5
如果作为二元运算符则是
package main
import "fmt"
func main() {
x :=
y :=
fmt.Println(x^y)
}
output: 6
XOR是不进位加法计算,也就是异或计算。0000 0100 + 0000 0010 = 0000 0110 = 6
&^ (AND NOT)位清空运算和被运算变量位置有关系,先看一个例子:
package main
import "fmt"
func main() {
x :=
y :=
fmt.Println(x&^y)
}
output: 2
计算x&^y 首先我们先换算成2进制 0000 0010 &^ 0000 0100 = 0000 0010 如果ybit位上的数是0则取x上对应位置的值, 如果ybit位上为1则取结果位上取0
>>右移 <<左移 感觉右移左移应该也是非常常见的使用了 继续看例子:
package main
import "fmt"
func main() {
x :=
y :=
fmt.Println(x<<)
fmt.Println(y>>)
}
output:4 2
进行转化为二进制 然后向左或者向右移动。
Golang的位运算操作符的使用的更多相关文章
- Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range
在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...
- Java 位运算(移位、位与、或、异或、非)
Java提供的位运算符有:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...
- [转]java位运算(1)
http://blog.csdn.net/xiaochunyong/article/details/7748713 Java提供的位运算符有:左移( << ).右移( >> ) ...
- <转>C++位运算详解
原文转自:http://www.crazycpp.com/?p=82 前言 以前收藏过一篇讲C++位操作的文章,这次博客搬家,以前的数据都没有保留,整理谷歌网站管理后台的时候,发现不时的还有网友有在查 ...
- 位运算【C++学习(计蒜客)】
C++提供了位运算操作符,使程序可以直接对内存进行操作.C++的这个特色大大提高了C++程序的执行能力.例如使用位操作运算可以将一个存储单位中的各个二进制位左移或右移一位,也可以将一个存储单位中所有的 ...
- C语言的移位操作符及位运算
C语言的移位操作符 位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算.位移位运算符分为左移和右移两种,均为双目运算符.第一运算对象是移位对象,第二个运算对象是所移的二进制位数. 位 ...
- golang中算数运算、位运算、逻辑运算、赋值运算常用方法
package main import "fmt" var a = 21.0 var b = 5.0 //var c float64 func main() { Arithmeti ...
- js中的位运算
按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...
- javascript 位运算
位运算博大精深,本文总结下基本的位运算的概念. 1.整数的二进制码 位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值.ECMAScript中的所有数值都以IEEE-754 64位格式存储 ...
随机推荐
- FORWARD转发链的功能
B主机开启路由转发功能,相当一台路由器,
- hadoop学习笔记壹 --环境搭建及配置文件的修改
Hadoop生态和其他生态最大的不同之一就是“单一平台多种应用”的理念了. hadoop能解决是什么问题: 1.HDFS :海量数据存储 MapReduce: 海量数据分析 YARN :资源管理调 ...
- rsyslog和logrotate服务
参考: http://www.lampbo.org/others/opensource/rsyslog-config-file-detail.html http://bangerlee.blog.ch ...
- oracle 查询 磁盘使用率
SELECT d.tablespace_name "Name", TO_CHAR(NVL(a.bytes / 1024 / 1024 / 1024, 0), '99, ...
- NodeJS之path模块
NodeJS之path模块 常用的主要有如下工具函数: 1. path.basename(path[, ext]) 2. path.extname(path) 3. path.dirname(path ...
- jenkins执行远程脚本注意的问题
1构建任务 ->新建任务 2.填写任务名称 第二次构建可以复制第一次的配置 3.选择任务名称上面右键 选择配置 4.如下图所示 附录脚本内容 test.sh#!/bin/bash JAR ...
- B-Tree外存数据结构 _(外存储器—磁盘)第一部分
1.外存储器—磁盘 计算机存储设备一般分为两种:内存储器(main memory)和外存储器(external memory).内存存取速度快,但容量小,价格昂贵,而且不能长期保存数据(在不通电情况下 ...
- kubernetes 持久化部署lamp类型网站
1.构建mariadb的镜像 cat Dockerfile FROM mariadb:latest ADD twocloud_kk.sql /docker-entrypoint-initdb.d #C ...
- LiveCharts文档-3开始-3类型和设置
原文:LiveCharts文档-3开始-3类型和设置 LiveCharts文档-3开始-3类型和设置 类型和设置 这一部分非常的重要,涉及到LiveCharts的基本构成单元的介绍 LiveChart ...
- WPF C#截图功能 仿qq截图
原文:WPF C#截图功能 仿qq截图 先上效果图 源码下载地址:http://download.csdn.net/detail/candyvoice/9788099 描述:启动程序,点击窗口butt ...