一旦迈入了程序员的行业,我们的世界便不再只有十进制,让我们一起来看看编程中涉及的其它进制及表示方式吧!
一、各种进制及表示方式
进制 | 包含元素 | 表示方式 |
二进制 | 0,1 | 满2进1,以0b或0B开头表示 |
十进制 | 0 - 9 | 满10进1 |
八进制 | 0 - 7 | 满8进1,以数字0开头表示 |
十六进制 | 0 - 9 及 A - F(10 - 15) | 满16进1,以0x或0X开头表示,此处的A - F不区分大小写 |
二、不同进制之间的计算方法
不同进制的计算方式其实都是同一个道理,根据我们常用的十进制的计算就能举一反三。例如在十进制中,数字125的背后就是底数为10,从右往左从零开始为第0,1,2,3...位数,125 = 5 × 10⁰ + 2 × 10¹ + 1 × 10²,而进制影响的便是背后的底数。
我们来试试根据这个计算方法将不同进制的数转换成十进制。
二进制:0b1101 = 1 × 2⁰ + 1 × 2² + 1 × 2³ = 13
八进制:027 = 7 × 8⁰ + 2 × 8¹ = 23
十六进制:0x2E = 14 × 16⁰ + 2 × 16¹ = 46
三、使用说明:二进制
为什么我们会经常听到二进制呢?了解计算机底层的存储方式之后你就明白了:所有数字在计算机底层都以二进制形式存在。举个例子,我们都知道1个byte的变量为1个字节,也就是8个bit。那么根据上面的计算方法我们可以得出,在二进制的形式下,一个数值为13的类型为byte的变量的底层存储方式便为:
0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
那么如果是一个负数的话在二进制中该如何表示出来呢?这就引申出了原码、反码、补码的概念。对于一个正数来说,三码合一,三个码表示出来都是一样的结果。在二进制中,首位是符号位,而负数的原码就是在其正数的基础上变动符号位。所以,一个数值为-13的类型为byte的变量的原码便为:
1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
紧接着,负数的反码就是在它原码的基础上,除符号位外,其他位置取反。所以这个负数的反码便为:
1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 |
那么补码又是怎么求呢?补码就是在反码的基础上加上一个1,所以这个负数的补码便为:
1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 |
也就是说,对负数来说,原码、反码、补码是截然不同的三种形式,那么我们以哪个为准呢?在计算机底层二进制的存储中,所有的数值,无论正负,都是以补码的方式存储的。