今天随意想到一个完全二叉树,考虑向左为0,向右为1,则树的从上到下有点像二进制串的构建。 而且如果树的最上面的根节点为高位的话,那么树的最下面最后的所有子结点从左到右就是二进制串的00000000, 00000001, ... , 11111110, 11111111.
接着再整理与二进制数表示的原码,反码,补码的联系
原码的话,就是串的最高位为符号位,0为正,1为负数。
所以树最后的叶子结点从左到右表示的是0,1,2,...,2^n-1, -0,-1,...,-2^n-1.
反码的话就是在原码的基础上最高位不动,其余位,负数取反。
所以树最后的叶子结点从左到右表示的是0,1,2,...,2^n-1, -2^n-1,-2^n-2,...,-1,-0。
而若是补码的话,就是对对应的反码进行+1操作。
分析后,树的最后叶子结点从左到右表示的是0,1,2,...,2^n-1, -2^n,-2^n-1,...,-2,-1.
从上面可以看到一开始还没有原码,反码,补码概念的时候,我们只有一堆二进制串,以及二进制串的操作,可以对正数进行运算,但是为了也能表达负数,并且将运算操作也统一起来,那么就必须有顺序概念并且保持数字与二进制串的一一对应关系。
可以看到上面的反码与补码是符合从左到右依次递增的表示方法。而且补码的话可以保持数字与二进制串一一对应关系。
而且从补码的表示方法0,1,2,...,2^n-1, -2^n,-2^n-1,...,-2,-1.中可以看出:
除了结尾处与中间最大值2^n-1处运算有问题外,其它地方都保持直观的增减关系。
还可以看到,计算机的最大值2^n-1 对其进行+1操作的话,值就会变成负的最大值-2^n,
而最小值进行-1操作就会变成最大值2^n。
不过这个倒是有种取模的味道,因此没有什么问题,可以这么看,如果将前一半的正数值整体迁移到后面的话刚好可以形成一个完美的循环。
-2^n,-2^n-1,...,-2,-1. 0,1,2,...,2^n-1。
再附上某个有关原码,反码,补码的链接