计算机进制的介绍

一.进制介绍

对于整数,有四种表示方式:

1)二进制:0,1,满2进1。

在golang中,不能直接使用二进制来表示一个整数,它沿用了c的特点。

参考:Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国

Go 复制代码
//赋值运算符的使用演示
	var c int = 5
	//二进制输出
	fmt.Printf("%b", c)

2)十进制:0-9,满10进1。2)

3)八进制:0-7,满8进1.以数字o开头表示。

Go 复制代码
var a int = 9
//八进制输出
fmt.Printf("%o\n", a)

4)十六进制:0-9及A-F,满16进1.以0x或0X开头表示此处的A-F不区分大小写。如:0x21AF+1=0X21B0

Go 复制代码
var d int = 19
//十六进制输出
fmt.Printf("0X%X\n", d)

二.进制的图示

三.进制的转换

进制的转换介绍

第一组(其他进制转十进制)

1)二进制转十进制

规则:从最低位开始(右边的),将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。

案例:请将二进制:1011转成十进制的数

1011=1*1+1*2+0*2*2+1*2*2*2

2)八进制转十进制

规则:从最低位开始(右边的),将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。

案例:请将八进制:0123转成十进制的数

0123=3*1+2*8+1*8*8+0*2*2*2=83

3)十六进制转十进制

规则:从最低位开始(右边的),将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。

案例:请将八进制:0x34A转成十进制的数

34A=10*1+4*16+3*16*16=842

4)示意图

第二组(十进制转其它进制)

1)十进制转二进制

规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。

案例:请将156转成二进制

2)十进制转八进制

规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。

案例:请将156转成二进制

3)十进制转十六进制

规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。

案例:请将356转成十六进制

4)示意图

第三组(二进制转其它进制)

1)二进制转八进制

规则:将二进制数每三位一组(从低位开始组合),转成对应的八进制数即可。

案例:请将二进制:11010101转成八进制

11010101=3+2+5=325

2)二进制转十六进制

规则:将二进制数每四位一组(从低位开始组合),转成对应的十六进制数即可。

案例:请将二进制:11010101转成十六进制

11010101=13+5=0xD5

3)示意图

第四组(其他进制转二进制)

1)八进制转二进制

规则:将八进制数每1位,转成对应的一个3位的二进制数即可。

案例:请将0237转成二进制

0237=10011111

2)十六进制转二进制

规则:将十六 进制数每1位,转成对应的一个4位的二进制数即可。

案例:请将0237转成二进制

0x237=1000110111

3)示意图

四.位运算的思考题

Go 复制代码
func main(){
 var a int = 1>>2 
 var b int = -1>>2
 var c int = 1<<2
 var d int = -1<<2
//a,b,c,d结果是多少
fmt.Println("a=",a)
fmt.Println("b=",b)
fmt.Println("c=",c)
fmt.Println("d=",d)
}

五.原码、反码、补码

1.网上对原码,反码,补码的解释过于复杂,这里精简几句话:

对于有符号的而言:

1)二进制的最高位是符号位:0表示正数,1表示负数

1===》0000 0001 -1===》1000 0001

2)正数的原码,反码,补码都一样

1===》原码 0000 0001 反码 0000 0001 补码 0000 0001

3)负数的反码=它的原码符号位不变,其他位取反(0->1,1->0)

1===》原码 0000 0001 反码 0000 0001 补码 0000 0001

-1===》原码 1000 0001 反码 1111 1110

4)负数的补码=它的反码+1

-1===》反码 1111 1110 补码 1111 1111

5)0的反码,补码都是0

6)在计算机运行时,都是以补码的方式来运行的

2.位运算符和移位运算符

Golang中有3个位运算:分别是"按位与&、按位或1、按位异或^,

它们的运算规则:

  • 按位与& :两位全为1,结果为1,否则为0

  • 按位或I :两位有一个为1,结果为1,否则为0

  • 按位异或^ :两位一个为0,一个为1,结果为1,否则为0 比如:2&3=? 213=? 2^3=? -2^2

2&3

2的补码:0000 0010

3的补码:0000 0011

2&3 0000 0010 =>2

2|3

2的补码:0000 0010

3的补码:0000 0011

2|3 0000 0010 =>3

2^3

2的补码:0000 0010

3的补码:0000 0011

2^3 0000 0001 =>1

-2^2

-2的补码:1111 1110

2的补码: 0000 0010

-2^2 补码 1111 1100 =>反码1111 1011 =>原码1000 0100 =>-4

3.Golang中有2个移位运算符:

>>、<<右移和左移,运算规则: 右移运算符 >>:低位溢出,符号位不变,并用符号位补溢出的高位

左移运算符 <<:符号位不变,低位补0

a:=1>>2 // 0000 0001 ---》0000 0000 ---》0

c:=1<<2 // 0000 0001 ---》0000 0100 ---》4

正数的原码和补码一样,不用在看补码了,运算结果为4

若-1,则要推导出补码,然后在还原到原码

相关推荐
Flynt8 小时前
Go 1.27 升了一波,泛型方法和 JSON v2 真香但有个坑
后端·go
用户1257585243610 小时前
对象存储 URL 为什么别到处拼:后台附件预览要验这一层
后端·go·ai编程
名字还没想好☜12 小时前
Go 的 database/sql 连接池实战:SetMaxOpenConns 怎么配、连接泄漏怎么查
数据库·sql·golang·go·数据库连接池
王中阳Go13 小时前
杰富瑞实测 8 款 AI Agent,国产千问 95 分登顶:我连夜把项目的 OpenAI 硬编码全拆了
人工智能·go
程序员爱钓鱼15 小时前
Go 编程实战:Map——使用 Key-Value 管理键值数据
后端·rust·go
程序员爱钓鱼2 天前
Go 编程实战:切片 Slice——灵活的动态数据集合
后端·面试·go
段振轩3 天前
gozero整合mysql,gorm,redis.jwt
前端·redis·mysql·go
程序员爱钓鱼3 天前
Go 编程实战:数组 Array——固定长度的数据集合
后端·面试·go
会编程的土豆3 天前
12306 春运抢票:数据一致性怎么保证
redis·消息队列·go·高并发
程序员爱钓鱼4 天前
Go break、continue、goto 详解
后端·面试·go