huima 发表于 2013-4-11 19:23
这是二进制补码的相关内容,java整形是32位,从32个0,到32个1这是整形的范围,首位0表示正数,1表示复数。 ...
嗯,表示自己粗心把数学演算整错了,整数的补码不变,负数的补码符号位不变,其余取反加1。对于上边计算还是用二进制进行加减,只不过是计算机中是使用补码的形式在运算,那么就要从补码转换到原码来。1000-0000 0000-0000 0000-0000 0000-0001(补码)对于这个结果,明白其实是负数,因为符号位为1,其为补码形式,要转换成原码。就要原道返回,减1,其它位除了符号位取反,即为1111-1111 1111-1111 1111-1111 1111-1111(原码)=-2147483647
|