一个int型的负数在计算机中的二进制表示为 11111111111111111111111111111000 现为了求其原码 遂进行先减1再取反的操作减1应该是这个二进制 + 1的补码 
即:11111111111111111111111111111000
+
11111111111111111111111111111111
--------------------------------
00000000000000000000000000000111这里有个疑问, 从倒数第4位开始, 由于逢2进1,每一位的计算结果为0且向上进1,如是当计算到正数第二位(符号位下一位)的1后, 向上进的那个1, 要怎么算, 就直接丢弃了吗? 符号位应该不参与计算吧!请高手解疑惑!!!

解决方案 »

  1.   

    将现有的反码当原码,再反码加一即可
    11111111111111111111111111111000也就是
    00000000000000000000000000000111
    00000000000000000000000000000001
    ------------------------------------
    00000000000000000000000000001000
    结果就是-8
      

  2.   

    大学时候学过一个最简单的方法:11111111111111111111111111111000 补码遇1取反法:方法是 从右开始遇到第一个1开始 所有元素取反,符号位保留那你的串就是
    11111111111111111111111111111000
                                *10000000000000000000000000001000那就是-8
      

  3.   

    都知道减1取反,还想那么复杂先减1
    11111111111111111111111111111000
    -
    00000000000000000000000000000001
    --------------------------------
    11111111111111111111111111110111
    再取反
    ~ 11111111111111111111111111110111
    -----------------------------------  
      00000000000000000000000000001000