计算机中的数字
计算机中的数字是如何表示的 由于计算机所使用的硬件特性,导致了在计算机的底层数字只能以二进制的形式进行表达。二进制和十进制一样,也是一种进位计数制,但是它的基数是 2。二进制表达式中 0 和 1 的位置不同,它所代表的数值也不同。例如,二进制数 0000 1010 表示十进制数 10。一个二进制数具有两个基本特点:两个不同的数字符号,即 0 和 1,逢二进一。 关于二进制的维基百科解释 无符号数 无符号数顾名思义就是单纯的数字,没有正负号也没有小数点,是非负整数。这一类型的数字表示起来最简单,只需用二进制的方式写出即可。 为了更加清楚的解释无符号数的表示方法CSAPP中介绍了一种图形化的表示方法来帮助读者理解无符号数的编码方式。 二进制数从右往左的第i位即表示为$2^{i-1}$,将不为0的项相加得到所表示的无符号数。 有符号数 在现实世界中,无符号数的局限性是相当大的,那么拥有正负号的数字该如何进行编码呢? 计算机中使用补码来表示有符号数,简单的来说就是在无符号数表示方法的基础上新增了一个符号位以表示正负。最高位若为0则表示正数,最高位若为1则表示负数。需要注意的是,符号位并不是单纯的表示数的正负性,它代表负权重的概念。 若一个有符号数的二进制形式如下: 那么它的十进制的计算方法为: 两个例子: 为了便于理解,补码也有对应的图形化表示方式: 其中蓝色代表正数,灰色代表负数,由图可知当最高位为1时得到的必定为负数。 数字的表示范围 无符号数的表示范围 对于无符号数,当字长为n时,其能表示的最大数为:$$1\times 2^{0} +1\times 2^{1} +\dots +1\times 2^{n-1} =2^{n} -1$$ 字长为8到64的无符号数所能表示的范围图表: 有符号数的表示范围 有符号数与无符号数的区别在于其最高位充当符号位,所以只有n-1位能够表示数的大小。 所能表示的最大值为:$$1\times 2^{0} +1\times 2^{1} +\dots +1\times 2^{n-2} - 0\times 2^{n-1} =2^{n-1} -1$$ 所能表示的最小值为:$$0\times 2^{0} +0\times 2^{1} +\dots +0\times 2^{n-2} - 1\times 2^{n-1} =-2^{n-1}$$ 无符号数与有符号数之间的转换 对于一个二进制数:$$x_{w-1}x_{w-2}\dots x_{1} x_{0}$$ 其对应的无符号数:$$U=x_{w-1}\times 2^{w-1} +x_{w-2}\times 2^{w-2} +\dots +x_{0}\times 2^{0}$$...