二进制

二进制

​ 计算机中的数据均以二进制形式保存。二进制跟十进制相似,但是只有0,1,逢2进1,十进制中的2就是二进制中的10。

1 十进制与二进制的转化

1.1 二进制转换成十进制:

1110 (2)= 1 * 23+1 * 22+1 * 21+0 * 20 = 14

1.2 十进制转换成二进制

问题:12(10)= ____(2) 

这时候我们可以利用短除法,对十进制除以二取余,然后倒序排列得到二进制:

12%2 = 0·········· (1)

6%2 = 0············(2)

3%2 = 1············(3)

1%2 = 1············(4)

答案: 1100(2)

1.3 补充

以上是正整数的十进制与二进制的转换,那么负整数呢?正分数和负分数呢?

  1. 负整数

    首先我们要了解十六位的二进制能代表的范围:

    • 无符号是0000 0000 0000 0000到1111 1111 1111 1111,转换成十进制是0~65535

    • 有符号的时候第一位是符号位,0表示正数,1表示负数,其余为数值位。

      • 对于原码,最小值是1111 1111 1111 1111,最大值是0111 1111 1111 1111,转换成十进制是-32767~32767。

        最小值:1111 1111 1111 1111(2) =
        $$
        \frac{(1-2^{15})\cdot1}{1-2}
        $$
        =-32767 (10)

        最大值:0111 1111 1111 1111(2) =
        $$
        \frac{(1-2^{15})\cdot1}{1-2}
        $$
        =32767 (10)

      • 对于反码,只是数值位取反,符号位不变,所以数值不会变。

      • 而对于补码,由于0的补码是固定的唯一的就是0000 0000 0000 0000,所以1000 0000 0000 0000表示的并不是0,而是

        最小值-32768。为什么呢?因为在计算机中只有加法,而1000 0000 0000 0000实际上是溢出一位,应该是1 1000 0000 0000 0000,它的值为-215 = -32768。所以他的取值范围是1000 0000 0000 0000到0111 1111 1111 1111,即-32768~32767。正数的补码、反码都是原码本身。

  2. 小数

    1. 二进制转换成十进制

      小数部分依次乘以2的负几次方

      问题:0.001(2)= ____(10)

      0 * 2-1+0 * 2-2+1 * 2-3 = 1/8 = 0.125

      答案: 0.125(10)(保留5位小数)

    2. 十进制转换成二进制

      小数部分乘以2,取整数部分,直至乘积没有小数部分,然后按序排放。例如:

      问题:0.12(10)= ____(2)

      0.12 * 2 = 0.24··········0(1)

      0.24 * 2 = 0.48··········0(2)

      0.48 * 2 = 0.96··········0(3)

      0.96 * 2 = 1.92··········1(4)

      0.92 * 2 = 1.84··········1(5)

      ······

      答案: 0.00011(2)(保留5位小数)

2 字节(byte)

​ 我们都知道 int 类型占用4个字节,lang类型占用8个字节,字节类型占用一个字节,那么一个字节在二进制要如何表示呢?

在计算机中一个字节由八位二进制表示,所以最大是1111 1111 (255)超过255的话要用两个字节。

上一篇:char类型的死循环探究


下一篇:java中的位运算符.按位非.位运算符计算方法