成都网站建设设计

将想法与焦点和您一起共享

go语言中变量x取反x golang变量

go语言里怎么把整数变成负数取相反数?

取一个数的相反数,可以用数学运算来实现:-1 * x的结果就是x的相反数。

创新互联公司是一家以网络技术公司,为中小企业提供网站维护、成都网站设计、网站建设、网站备案、服务器租用、申请域名、软件开发、成都微信小程序等企业互联网相关业务,是一家有着丰富的互联网运营推广经验的科技公司,有着多年的网站建站经验,致力于帮助中小企业在互联网让打出自已的品牌和口碑,让企业在互联网上打开一个面向全国乃至全球的业务窗口:建站电话联系:028-86922220

Go 数据类型(三)整型及运算符

int8 , uint8

int16 , uint16

int32 , uint32

int64 , uint64

int , uint , uintptr

Go为强类型语言,所以上述类型默认为不同类型

如需运算,可通过强制类型转换

+ , - , * , / , %

, , == , = , = 和 !=

比较运算符计算的结果是布尔值

位与: xy

位或: x|y

异或: x^y

取反: ^x

左移:

右移:

逻辑运算符的计算结果也是布尔值

逻辑与: xy

逻辑或: x||y

逻辑非: !x

golang 正负数取反

想要知道取反计算过程,首先搞懂  “原码“,“反码”,“补码”,“取反”。

0变1,1变0

原码是计算机机器数中最简单的一种形式,数值位就是真值的绝对值。原码表示法在最高位为符号:正数该位为0,负数该位为1,原码又称带符号的绝对值。看整数9及-9的原码如下:

9的原码:0000 1001

-9的原码: 1000 1001

重点:对于源码,绝对值相等的正数和负数只有符号位不同。

反码通常是用来由原码求补码或者由补码求原码的过渡码。正数的反码就是其原码,负数的反码就是将原码除符号位以外每位取反(0变1,1变0)。例如:

9的反码:0000 1001

-9的反码:1111 0110

在计算机系统中,数值一律用补码来表示和存储。正数的原码就是其补码。负数的补码是其反码+1.例如:

9的补码:0000 1001

-9的补码:1111 0111

正整数的原码、反码、补码都是一样的。负数的反码是除符号位其他每一位取反,负数的补码是其反码+1

首先明确一个概念,由于在计算机中二进制都是以其补码形式存放在内存中的。所以要知道 ^9 就是对 9 的补码取反,也就是说无论是整数还是负数对其取反都是对其补码取反。

正数9:

原码为: 0000 1001

反码为: 0000 1001

补码为: 0000 1001

1. 取反结果=负数补码 :0000 1001 --- (取反) 1111 0110 

注:由于 ^ 位取反操作符,对于符号位也会取反 所以这里得到一个负数的补码,想要计算其真实的值。还需要将其转换成原码。

2. 得反码:1111 0110  -  1  =  1111 0101

补码 = 反码 + 1 (反推) 反码 = 补码 - 1

3. 得原码 1111 0101 -- 1111 1010 = -10

原码  =  反码取反

负数-9:

原码为: 1111 1001

反码为: 1111 0110

补码为: 1111 0111

1. 取反结果=正数补码 1111 0111 ---- 0000 1000

2. 正数原码 = 反码 = 补码 = 0000 1000 = 8

go语言中的反射

import (

"fmt"

"reflect"

)

func reflecType(x interface{}){

v := reflect.TypeOf(x)

fmt.Println("type:%v\n", v)

fmt.Println("type name:%v , rtpe kind:%v \n", v.getName(), v.getType())

}

type Cat struct{}

//通过反射设置变量的值

func reflectSetValue1(x interface{}){

v := reflect.ValueOf(x)

if v.Kind() == reflect.Int64{

v.SetInt(200) //修改的是副本, reflect 包会引发panic

}

}

//通过反射设置变量的值

func reflectSetValue2(x interface{}){

v := reflect.ValueOf(x)

//反射中使用Elem()获取指针对应的值

if v.Elem().Kind() == reflect.Int64{

v.Elem().SetInt(200)

}

}

func main(){

var a float32 = 3.14

reflectType(a) //type name:float32 type kind:float32

var b int64 = 100

reflectType(b) // type name :int64 type kind :int64

var c = Cat{}

reflectType(c) // type name :Cat type kind :struct

reflectSetValue1(b)

fmt.Println(b) //依然为100

reflectSetValue2(b)

}


网页名称:go语言中变量x取反x golang变量
转载来源:http://chengdu.cdxwcx.cn/article/ddeddgg.html