问题A的价值是什么?答案是a=1024。你觉得有点神奇吗?这是计算机科学的基础知识,是一个关于数字在计算中如何表达的问题。我们来看看为什么是1024。
数字的表达
计算机中的数字都是二进制表示。在计算机眼里,正数和负数都是由0和1组成的,符号本身就是数字。通常,最高位用作符号,0为正,1为负。常用的代码有原码、补码和补码。我们现在的电脑使用补码。
补码正数以最高有效位为0表示,其余为数字的绝对值。例如,在8位机器[1]=00000001中,负数如何表示?负数等于2的n次方,其中n为机器的位长,减去其绝对值,如[-1]=2 8-1=1111111。
那么有没有更快的方法找到负数的补码呢?答案是肯定的,只要把正数一点一点倒过来,然后加1,就可以得到正数的补码。比如1的补码是0000 0001一点一点,然后你得到1111 1110,再加1得到1111 1111。结果与上述一致。
从上面我们可以发现,正数的补数也可以用负数用同样的原理得到,而且运算方法和用正数得到负数是一样的,也就是说~ x ^ 1=-x,这是我们书中的补数运算,也是a=~ 1024 ^ 1;a=1024的原因。
数字用补码表示后,计算机可以直接用二进制加法计算,不需要在意数字是正数还是负数,因为符号本身是符号化的。