要了解为什么0自减后会变成65535,需要先了解计算机中二进制补码的概念。在计算机中,所有数值都是以二进制的形式存储和表示的,一个8位二进制数可以表示0~255之间的数值。而在计算机中,使用二进制补码来表示有符号的整数,正数和负数的表示方式是不同的。
计算机中,正数的补码就是它本身,而负数的补码则是在对应正数的基础上按位取反,末尾再加1。例如,-2的补码为11111110(先对应正数的二进制为00000010,再按位取反得到11111101,最后末尾加1得到11111110)。
在计算机中,0自减可以看作是二进制反码运算的结果。二进制反码运算是将每一位都取反,即0变成1,1变成0。因此,0自减后得到的二进制数为11111111。但是,因为计算机使用补码表示有符号数,所以得到的结果依然需要转换成补码。
对于一个有符号数的补码,其最高位为符号位。符号位为0表示正数,符号位为1表示负数。因为计算机中采用二进制补码系统来表示有符号数,所以在进行减法运算时,减法可以统一转换成加法运算,减去一个数的过程就是加上它的补码。
因此,当0自减得到的二进制数11111111转换成补码后,符号位为1,表示这是一个负数。
最后,需要将得到的补码再次转换成十进制数。以11111111为例,它的补码为补码为-1,所以转换成十进制数时需要先将补码转换成对应的原码,然后再将原码转换成十进制数。将-1的补码按照上述方法转换成原码为10000001,由于符号位为1,表示是一个负数,因此原码为-1。
最后,将-1转换成十进制数得到65535。