linux 什么数据类型 8字节,linuxea:go数值类型(8)

5c1967c5325842cec010c6abd3e07965.gif

整型,go提供了5种有符号,5种无符号,1种指针,1种单字节,一种单个unicode字符(unicode码点),共13种整数类型,零值均为0.

标识符:int,uint,rune,int8,int16,int32,int64,uint8,uint16,uint32,uint64,byte,uintptr,其中最为常用的是int类型,rune是单个unicode字符(unicode码点),int8表示8位的Int类型,int16表示int 16位等等。u开头的是无符号,uint8是无符号int8位,uint16是无符号int16位等等。byte一个字节,八位。uintptr是指针类型,与系统有关。

有符号的,0表示正数,1表示负数。表示范围8字节是2^7-2^7-1;无符号表示正数,表示范围是0-2^8-1是256.

int

package main

import "fmt"

func main(){

var age int = 18

fmt.Printf("%T %d",age,age) // int 18

}

打印类型和数值%T和%d。fmt.Printf("%T %d",age,age)

算数运算

加减乘除余

除数不能为0

fmt.Println(9 - 5) //4

fmt.Println(3 * 3) //9

fmt.Println(3 + 3) //6

fmt.Println(9 / 2) //4

fmt.Println(9 % 2) //1

自增和自减

++加1,-- 减1

package main

import "fmt"

func main(){

var age int = 18

age = 18

age++

fmt.Printf("age++:%d\n",age)

age--

fmt.Printf("age--:%d\n",age)

}

运行

[root@LinuxEA /opt/Golang]# go run int.go

age++:19

age--:18

关系运算

==等于,!=不等于,>大于,>=大于等于,

package main

import "fmt"

func main(){

fmt.Println(1 == 1)

fmt.Println(2 != 1)

fmt.Println(2 > 3)

fmt.Println(2 >= 3)

fmt.Println(2 < 3)

fmt.Println(2 <= 3)

}

运行结果

true

true

false

false

true

true

位运算

位运算实际上是对二进制进行计算,10进制需要转换成二进制进行计算

&与 ,|或 ,^亦或, <>右移,&^按位清空

fmt.Println(7 & 2) // 2

fmt.Println(7 | 2) // 7

fmt.Println(7 ^ 2) // 5

fmt.Println(7 << 2) // 28

fmt.Println(7 >> 2) // 1

fmt.Println(7 &^ 2) // 5

这里使用了辗转相除法也可以运算。

赋值运算

赋值同时可以进行计算,如,=,+=,-=,*=,/=,%=,&=,|=,<<=,>>==,&^=

a+b 等于 a = a+b

age = 1

age += 3

fmt.Println(age) // 1+3=4

age -= 2

fmt.Println(age) // 4-2=2

类型转换

如果两个不同的类型进行运算的时候就需要进行强转换。如果不进行转换就会出错

var int1 int = 10

var int2 uint = 2

fmt.Println(int1 + int2)

当运行时候会抛出错误

[root@LinuxEA /opt/Golang]# go run int.go

# command-line-arguments

./int.go:44:19: invalid operation: int1 + int2 (mismatched types int and uint)

这时候必须将两个变量的类型转换一致,且不管是int或者uint,只要一致即可。如下:

var int1 int = 10

var int2 uint = 2

fmt.Println(int1 + int(int2)) // int2的uint转换成int

fmt.Println(uint(int1) + int2) // int1的int转换成uint

fmt.Printf("%T %T",int1,int2) // int uint

运行

[root@LinuxEA /opt/Golang]# go run int.go

12

12

int uint

注意

我们需要注意的是,当一个int32转换成int8的时候,可能会出现溢出。或者如下的16进制转换:

var int3 int = 0XFFFF

fmt.Println(int3) // 65535

fmt.Println(uint8(int3)) // 255

fmt.Println(int8(int3)) // -1

fmt.Printf("%T",int3) // int

从大向小转换的时候就可能会出现溢出的问题。

字节与码点

byte是字节,rune表示码点。这两个在赋值的时候可以使用单引号,而int也可以实现,不过int使用的是十进制。当然,byte和rune也是int类型

var a byte = 'A'

var b rune = '测'

fmt.Println(a,b) // 65 27979

fmt.Printf("%T %T",a,b) // uint8 int32

对于码点的打印使用%U,使用%q打印字面量的值

fmt.Printf("%q %q",a,b) // 'A' U+6D4B

这里可以做个简单的转换,二进制使用%b,八进制%o,十六进制%x

age = 17

fmt.Printf("%T %d %b %o %x\n",age,age,age,age,age) // int 17 10001 21 11

除非另有说明,否则本站上的内容根据以下许可进行许可: CC署名-非商业性使用-相同方式共享4.0国际许可协议4.0进行许可

本文作者:www.linuxea.com for Mark

文章链接:http://www.linuxea.com/2480.html (转载请注明本文出处和本章链接)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值