计算机进制的介绍

一.进制介绍

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

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,则要推导出补码,然后在还原到原码

相关推荐
DemonAvenger6 小时前
深入剖析 sync.Once:实现原理、应用场景与实战经验
分布式·架构·go
一个热爱生活的普通人1 天前
Go语言中 Mutex 的实现原理
后端·go
孔令飞1 天前
关于 LLMOPS 的一些粗浅思考
人工智能·云原生·go
小戴同学1 天前
实时系统降低延时的利器
后端·性能优化·go
Golang菜鸟2 天前
golang中的组合多态
后端·go
Serverless社区2 天前
函数计算支持热门 MCP Server 一键部署
go
Wo3Shi4七2 天前
二叉树数组表示
数据结构·后端·go
网络研究院2 天前
您需要了解的有关 Go、Rust 和 Zig 的信息
开发语言·rust·go·功能·发展·zig
27669582922 天前
拼多多 anti-token unidbg 分析
java·python·go·拼多多·pdd·pxx·anti-token
程序员爱钓鱼3 天前
Go 语言邮件发送完全指南:轻松实现邮件通知功能
后端·go·排序算法