回顾
10进制转2进制:整数部分除2取余法,小数部分乘2取整法和整数退位法。
2进制转10进制:原则是逢2进1, 0b1111 转换成10进制: 8+4+2+1=15;如果是8进制转10进制则是逢8进1, 0757 转换成10进制:7x64+5x8+7x1=495关于叫法,十进制中 十位、百位、千位……
在二进制其实是 二位、四位、八位……其实挺好理解的。
总结:除k取余,乘k取整,逢k进1。然后2的倍数的进制,比如8进制和16进制,换算的时候,可以3位一算或者4位一算。小数位使用乘k取整可能出现计算很久都没结果,因为要算一个末尾为0的数出来,这时候可以使用整数退位法。
补充之java中进制表示:
- java中2进制 0b1101(0b开头)
- java中8进制 07(0开头)
- java中16进制 0xf(0x开头)
2进制转16进制
1011 1101 1111 0101
2进制转16,原则是4位一算,用8 4 2 1累加,然后一一对应。
举个例子
0xf对应15,2进制表示 1111
所以0xbdf5
16进制转2进制
0xbdf5
4位一算其实蛮简单的, b d f 5,b在10进制中值为11,也就是1011,这就简单了
1011 1101 1111 0101
10进制转2进制
42 → (101010)2
0.125 → (0.001)2
补充知识:原码,反码,补码
注意:取反运算和反码不是一个概念
数值在计算机中是以补码的方式存储的。
一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1。
比如,十进制中的数+2 ,计算机字长为8位,转换成二进制就是[00000010]。如果是-2,就是[10000010]。因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数[10000010],其最高位1代表负,其真正数值是-2而不是形式值130([10000010]转换成十进制等于130)。所以将带符号位的机器数对应的真正数值称为机器数的真值。
- 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
- 反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
- 补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上,符号位不变, 其余各位取反,最后+1。 (即在反码的基础上+1)
计算机使用补码的原因
- 被设计成只有加法没有减法,由于让计算机分辨符号位让基础电路设计变得复杂,所以出现反码。
- 然而用反码计算,出现了0这个特殊数值,0带符号是没有意义的。会有[0000 0000]和[1000 0000]两个编码表示0。于是设计了补码,负数的补码就是反码+1,正数的补码就是正数本身,从而解决了0的符号以及两个编码的问题: 用[0000 0000]表示0,用[1000 0000]表示-128。
参考