2字节整数最小值为什么是-32768,而不是-32767

解决方案 »

  1.   

    这个问题跟补码有关,补码对负数的定义是,正数部分取反加一保证-0的补码还是0,这样正数就比负数少一个了(0不算正数也不算负数的话),65536个数当然就分为32767个正数,一个0,32768个负数了。
    那么-32768怎么通过以上的规则表示表示?(1000 0000 0000 0000)?如何回推就是呵呵没法表示(会溢出)。
      

  2.   

    这个问题跟补码有关,补码对负数的定义是,正数部分取反加一保证-0的补码还是0,这样正数就比负数少一个了(0不算正数也不算负数的话),65536个数当然就分为32767个正数,一个0,32768个负数了。
    那么-32768怎么通过以上的规则表示表示?(1000 0000 0000 0000)?如何回推就是呵呵没法表示(会溢出)。
      

  3.   

    0     =0000 0000 0000 0000
    32767 =0111 1111 1111 1111
    -1    =1111 1111 1111 1111
    -32767=1000 0000 0000 0001 
    -32768=1000 0000 0000 0000
      

  4.   

    0     =0000 0000 0000 0000
    .....
    32766 =0111 1111 1111 1110
    32767 =0111 1111 1111 1111
    -1    =1111 1111 1111 1111
    ......
    -32767=1000 0000 0000 0001 
    -32768=1000 0000 0000 0000