x=5
int是32位
所以
x是                   0 0000 0000 0000 0000 0000 0000 0000 0101   5
取反就是              1 1111 1111 1111 1111 1111 1111 1111 1010
是个负数,转为补码为:1 0000 0000 0000 0000 0000 0000 0000 0110   -6
(最高位位符号位)至于
x=x++
实际上x的值不变的
这个解释起来好像比较复杂,反正上次一专家解释了半天没明白,好像说到了运算时寄存器的问题,总之结果如此,所以要避免这么写。

解决方案 »

  1.   

    至于
    x=x++
    实际上x的值不变的
    这个解释起来好像比较复杂,反正上次一专家解释了半天没明白,好像说到了运算时寄存器的问题,总之结果如此,所以要避免这么写。
    --------------------------------------------------------------------------------------
    不会吧,x++和++x的问题还需要专家讲半天????
      

  2.   

    不是x++和++x
    的问题
    而是说
    如果
    x=1

    x=x++;
    后x不变
    不错,确实是右边的x先赋值给左边的x
    那++咋办呢?
      

  3.   

    回复人: febchen() ( ) 信誉:105 
    x=5
    int是32位
    所以             (最高位符号)
    x是                   0    0000 0000 0000 0000 0000 0000 0000 0101   5
    取反就是              1    1111 1111 1111 1111 1111 1111 1111 1010   -5
    是个负数,转为补码为:1    0000 0000 0000 0000 0000 0000 0000 0110   -6
    ===========================================================================
    你给出的数我越看越糊涂了:)应该是:
    x是                   0    0000 0000 0000 0000 0000 0000 0000 0101   5
    x取反就是             1    1111 1111 1111 1111 1111 1111 1111 1010   -5
    如果再对-5求补码,
    那就是                0    0000 0000 0000 0000 0000 0000 0000 0110    6
    至于x=x++,确实很难理解:)
      

  4.   

    x=x++;
    这个问题还请指点!
    ---------------x=x++;
    如果x=5,我们看以下步骤运算步骤:            寄存器   内存
    初始状态:           0     5
    读入x                  5   <----- 5
    x=x;                   5  ------> 5
    x++;(此x为寄存器值)    6          5
    运算结束,寄存器清零   0          5可以看出,此操作没有效果.-----------------------------
    x=++x;
    如果x=5,我们看以下步骤运算步骤:            寄存器   内存
    初始状态:           0     5
    读入x                  5   <----- 5
    x++;(此x为寄存器值)    6          5
    x=x;                   6  ------> 6
    运算结束,寄存器清零   0          6
      

  5.   

    Java使 用 补 码 来 表 示 二 进 制 数:
    x=5
    int是32位
    所以             (最高位符号)
    x是正数,原码=补码:  0    0000 0000 0000 0000 0000 0000 0000 0101   5 (存储在计算机中)
    取反就是              1    1111 1111 1111 1111 1111 1111 1111 1010   
    是个负数,转为补码为:1    0000 0000 0000 0000 0000 0000 0000 0110   -6
    ===========================================================================
    x=-5
    int是32位
    所以             (最高位符号)
    x是负数(原码)         1    0000 0000 0000 0000 0000 0000 0000 0101   -5
    转补码:              1    1111 1111 1111 1111 1111 1111 1111 1011  (存储在计算机中)
    取反就是              0    0000 0000 0000 0000 0000 0000 0000 0100   
    是个正数,补码=原码: 1    0000 0000 0000 0000 0000 0000 0000 0100   4
      

  6.   

    thomas_20() 
    正数,补码=原码
    ????无论正数负数,它的补码都为相反数吧?