注:"^"代表好多次方,例如2^3代表2的3次方即8Q1:为什么byte型的最小值是-2^7(即-128)而不是-2^7+1(即-127)?
我按照2进制换算到10进制的方法应该是:
最高位符号位不算,后面7位应该是:-2^6-2^5-2^4-2^3-2^2-2^1-2^0=(-1)*(2^7-1)/(2-1)=-2^7+1=-127Q2:为什么负数要用补码表示?要得到用byte表示的-8的补码,为什么要先到得到7的源码?

解决方案 »

  1.   

    交流群 C++ java 36414176
      

  2.   

    用补码表示负数,电路实现简单,可以用一个加法器同时计算加法和减法。
    用补码表示的数,按照定义,最小的就是-128。
    如果不看定义,你也可以理解为“-0”表拿去表示-128了,仅仅“+0”用来表示0。
    本来一个byte,8个比特,有256种状态,正好-128到+127是256个数,一个状态也没浪费。
      

  3.   

    补码中,负数最高位都是1,但那可以认为只是一种巧合。
    按照补码的定义,一个负数M的补码,其二进制表示等同于无符号整数2 ^ N + M,其中N是这种类型的位数。
    对于byte的-128而言,N为8,M为-128,2 ^ 8 + (-128) = 128,而无符号数的128正好是:10000000。
    从这个角度来数,当无符号数的0~255表示带符号数时,基中0~127仍表示原值,而128~255则表示-128~-1,补码表示中不像原码那样还有个-0。
      

  4.   

    首先byte是8位的,所以它只能是
    00000000-11111111;
    其次,这些数字都是补码.
    所以它是-128 到 127之间的数.