1.十进制转二进制

十进制转二进制以2辗转相除取余。例如十进制649转二进制

1355 ÷ 2 = 677余1 ÷ 2 = 338余1 ÷ 2 = 169余0 ÷ 2 = 84余1 ÷ 2 = 42余0 ÷ 2 = 21余0 ÷ 2 = 10余1 ÷ 2 = 5余0 ÷ 2 = 2余1 ÷ 2 = 1余0 ÷ 2 = 0余1

然后从右往左取余便是二进制。为 10101001011。补足进制位为 0101 0100 1011。但是可以更简洁

1355 677 338 169 84 42 21 10 5 2 1 0

然后从右往左一个一个乘以进制数也就是2然后再用前面一位减去当前结果然后取余。但是需要注意的是0乘以任何数字都是0。所以0不相乘而是直接取倒数第二位为余数。然后再从倒数第二位开始乘以进制数然后再往左开始用左边的一位数字减去当前相乘的结果取余

结果为10101001011。但是按照二进制补位的话需要在前面补0。完整的二进制位为0101 0100 1011。二进制数四位为一组。但是如果按完整比特位来算的话则是8位为一组也就是1个字节 = 8Bit。也就是0000 0101 0100 1011。那么当前是两组比特位共为16位比特位也就是2个字节

2.十进制转八进制

十进制转八进制同理也是辗转相除

1355 ÷ 8 = 169余3 ÷ 8 = 21余1 ÷ 8 = 2余5 ÷ 8 = 0余2

然后从右往左取余为2513。简化之后为

1355 169 21 2 0

然后从右往左一个一个乘以进制数也就是2然后再用前面一位减去当前结果然后取余。这里也是直接取倒数第二位为余数。然后再从倒数第二位开始乘以进制数然后再往左开始用左边的一位数字减去当前相乘的结果取余

结果为2513。完整的八进制为02513

3.十进制转十六进制

十进制转16进制也是16辗转相除。但不同的是9以后的数字是以字母代替的。ABCDEF = 10 11 12 13 14 15

1355 ÷ 16 = 84余11 ÷ 16 = 5余4 ÷ 16 = 0余5

然后从右往左取余为54B

简化后为1355 84 5 0

然后从右往左一个一个乘以进制数也就是2然后再用前面一位减去当前结果然后取余。这里也是直接取倒数第二位为余数。然后再从倒数第二位开始乘以进制数然后再往左开始用左边的一位数字减去当前相乘的结果取余

结果为54B。完整的十六进制为0x54B

计算补充

而对于一些新手来说可能没看懂上面的算法。所以这里拆解并且优化一下。更方便理解

首先是1355。就用十六进制举例。1355为十进制。转为十六进制。那么就需要1355除以16。且结果必须是整数然后取余数

1355 ÷ 16 = 84余11

11就是余数。然后再继续将结果除以16直到商(结果)小于除数(16)。但余数可以先不写或分隔开。那么就是这样的。

1355 84.11 5.4 0.5

点后面的数字为余数。点左边的数字为商(结果)。从右往左取余数直到左边第一位时结束。结果为54 11。但十六进制当中9以上的数字需要用字母代替。11对应字母b。那么也就是54b。而完整的十六进制表达需要在前面加上0x。也就是0x54b。这样十进制转16进制就转好了。至于为什么后面要把0写出来那是为了把余数写出来。5÷16因为这不是浮点数运算所以在这里是除不掉的所以结果为0。5直接归为余数

进制知识

计算机当中一般二进制 十进制 十六进制用的最多。其他进制一般用的较少甚至不用。除非涉及算法加密之类的才可能用得到。其次在计算机内存数据存储当中进制数据开头是不一样的

二进制:0b 例如:0b1001

八进制:0 例如:045

十六进制:0x 例如:0xFF0017A2

而十进制就是正常写就行。123456这种。

其次就是进制数讲究 逢X进1。例如二进制就是逢2进1。十进制就是逢10进1。就比如9之后就是10那么就要往前进一位。也就是10。二进制也是。十进制的1是二进制当中1。十进制的2在二进制当中就是10。十六进制也是如此。所以在除日常生活冲使用的十进制以外其他进制当中见不到当前进制的数字。