新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
很多语言都是采用 ~ 作为按位取反运算符,Go 里面采用的是 ^ 。
专注于为中小企业提供成都做网站、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业德宏州免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
如果作为二元运算符,^ 表示按位异或,即:对应位相同为 0,相异为 1。
操作符 ^,按位置零,例如:z = x ^ y,表示如果 y 中的 bit 位为 1,则 z 对应 bit 位为 0,否则 z 对应 bit 位等于 x 中相应的 bit 位的值。
对于有符号的整数来说,是按照补码进行取反操作的(快速计算方法:对数 a 取反,结果为 -(a+1) ),对于无符号整数来说就是按位取反
计算过程
以3为例 3在内存中补码为 0*** 0011
取反 1*** 1100
-1操作 1*** 1011
除符号位取反 1*** 0100 结果为-4
-------------------------------------------
以9为例 9在内存中补码为 0*** 1001
取反 1*** 0110
-1操作 1*** 0101
除符号位取反 1*** 1010 结果为-10
-------------------------------------------
以-5为例 -5在内存中为的补码为 1*** 1011
为什么呢
-5源码 1*** 0101
除符号取反 1*** 1010
+1操作 1*** 1011
-------------------------------------------
那么-5取反怎么算
补码 1***1011取反为 0***0100
因为符号位为0,所以是正数了,正数的补码反码源码都是一个,所以是4
===================================
再看-1
-1源码 1*** 0001
除符号取反 1*** 1110
+1操作 1*** 1111
补码 1*** 1111 取反为 0*** 0000
因为符号位为0,所以是正数了,正数的补码反码源码都是一个,所以是0
go语言取反输出的例子看这里
第一种
1.使用go env命令,查看系统的配置环境,可以看到GOARCH(当前系统)是amd64
2.执行 set GOARCH=386 配置go输出系统平台为32位,此时再用go env命令查看系统的配置环境,如图:
第二种
打开Run Edit Configurations Configuration标签
为Environment添加两个设置项
参考
本文介绍一些Go语言的基础语法。
先来看一个简单的go语言代码:
go语言的注释方法:
代码执行结果:
下面来进一步介绍go的基础语法。
go语言中格式化输出可以使用 fmt 和 log 这两个标准库,
常用方法:
示例代码:
执行结果:
更多格式化方法可以访问中的fmt包。
log包实现了简单的日志服务,也提供了一些格式化输出的方法。
执行结果:
下面来介绍一下go的数据类型
下表列出了go语言的数据类型:
int、float、bool、string、数组和struct属于值类型,这些类型的变量直接指向存在内存中的值;slice、map、chan、pointer等是引用类型,存储的是一个地址,这个地址存储最终的值。
常量是在程序编译时就确定下来的值,程序运行时无法改变。
执行结果:
执行结果:
Go 语言的运算符主要包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符以及指针相关运算符。
算术运算符:
关系运算符:
逻辑运算符:
位运算符:
赋值运算符:
指针相关运算符:
下面介绍一下go语言中的if语句和switch语句。另外还有一种控制语句叫select语句,通常与通道联用,这里不做介绍。
if语法格式如下:
if ... else :
else if:
示例代码:
语法格式:
另外,添加 fallthrough 会强制执行后面的 case 语句,不管下一条case语句是否为true。
示例代码:
执行结果:
下面介绍几种循环语句:
执行结果:
执行结果:
也可以通过标记退出循环:
--THE END--
运算符用于在程序运行时执行数学或逻辑运算。
1.算术运算符
Go 语言的算术运算符如图,假设A值为10,B值为20。
2.关系运算符
Go 语言的关系运算符如图,假设A值为10,B值为20。
3.逻辑运算符
Go 语言的逻辑运算符如图。假定A值为True,B值为False。
4.位运算符
位运算符对整数在内存中的二进制位进行操作。
位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能。如果要开发高效率程序,位运算符是必不可少的。
Go 语言的位运算符如图。假定 A = 60,B = 13,其二进制数转换如下。
A = 0011 1100
B = 0000 1101
5.赋值运算符
Go 语言的赋值运算符如图。
6.其他运算符
Go 语言的其他运算符如图。
运算符的优先级
所谓优先级,就是当多个运算符出现在同一个表达式中时,先执行哪个运算符。
import "workname/packetfolder"
导入多个包
方法调用 包名.函数//不是函数或结构体所处文件或文件夹名
packagename.Func()
前面加个点表示省略调用,那么调用该模块里面的函数,可以不用写模块名称了:
当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。下划线的作用仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数
import _ package
变量声明必须要使用否则会报错。
全局变量运行声明但不使用。
func 函数名 (参数1,参数2,...) (返回值a 类型a, 返回值b 类型b,...)
func 函数名 (参数1,参数2,...) (返回值类型1, 返回值类型2,...)
func (this *结构体名) 函数名(参数 string) (返回值类型1, 返回值类型2){}
使用大小来区分函数可见性
大写是public类型
小写是private类型
func prifunc int{}
func pubfunc int{}
声明静态变量
const value int
定义变量
var value int
声明一般类型、接口和结构体
声明函数
func function () int{}
go里面所有的空值对应如下
通道类型
内建函数 new 用来分配内存,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配类型零值的指针
func new(Type) *Type
[这位博主有非常详细的分析]
Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。
goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。
同一个程序中的所有 goroutine 共享同一个地址空间。
语法格式如下:
通道(channel)是用来传递数据的一个数据结构。
通道的声明
通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 - 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。
[这里有比较详细的用例]
go里面的空接口可以指代任何类型(无论是变量还是函数)
声明空接口
go里面的的强制类型转换语法为:
int(data)
如果是接口类型的强制转成其他类型的语法为:
go里面的强制转换是将值复制过去,所以在数据量的时候有比较高的运行代价