整数进制转换和带小数的进制转换问题分析

384 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

进制转换

1.进制类型

  • 十进制,如:99,-100,0

  • 二进制,以0b或0B开头,如:0b11

  • 八进制,以0开头,如013

  • 十六进制,以0x或0X开头,如0xC

在我们的日常生活中用的最频繁的就是十进制类型,在计算机中用的最多的是二进制类型。而我们现在所学习的汇编语言(Java,C,g、Go)其实他们的都是通过中间件转换成机器语言(二进制)而实现的。因此学习进制转换还是很有必要的!

2.二进制

【1】二进制转换为十进制:

二进制: 1101

1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0

=     8    +    4   +   0    +   1

=  13

3.八进制

【1】八进制转换为十进制: 八进制:10

1 * 8^1 + 0 * 8^0

=   8 + 0

=   8

4.十六进制

【1】 十六进制转换为十进制 十六进制:1A

1 * 16^1 + 10 * 16^0

=   16 + 10

=   26

5.十进制

【1】十进制转换为x进制:就是除以x直到为0为止。 例如(十进制13转二进制):

image.png

6.x进制转y进制

【1】 看了这么久大家会发现,其实上面讲的都是各种进制转换为十进制,或者就是十进制转换为各种进制。但要是在平时的考试中,更经常考的是x进制转换y进制的问题。那其实也很简单,那就是以十进制为中转站,先将x进制转换为十进制,再将十进制转换为y进制就好啦!例如(二进制数1000转换为八进制):

1⃣️二进制转十进制:

1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0

=     8    +    0   +   0    +   0

=  8

2⃣️十进制换八进制

image.png

再倒着读取,所以最后的答案就是10。

带小数点的进制转换

【1】上面的大多数问题其实都是基于整数的进制转换,但是要是有参加比赛的友友们有时候其实会发现,考试的时候经常还会出现带小数的进制转换。

  • 首先,遇到问题不要慌!这类问题也是分为十进制转换x进制和x进制转换十进制的。其实网络上有很多种方法,整理完之后我还是觉得以下这种方法最快,最适合!(但是它要求计算能力要好)

1⃣️十进制转x进制,直接乘8取到的整数位就是它x进制的第一位的小数位,然后接着将剩余的小数位数继续乘,直到乘到小数位为0为止(例如,0.6875转8进制):

  1. 0.6875 * 8 ---> 5.5 --> 5
  2. 0.5 * 8 ---> 4.0 --> 4

所以十进制0.6875转八进制的答案就是0.54

2⃣️x进制转十进制,直接用小数位上的数开始乘,第一个数乘x^-1,第二个数乘*x^-2以此类推。(例如,十六进制FF.1转十进制):

  1. 这时候我们先算整数位,15 * 16^1 + 15 * 16^0 = 255
  2. 接着再算小数位,1 * 16^-1 = 0.0625

最后将他们拼接起来,所以十六进制FF.1转十进制的答案就是255.0625