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的值不变的
这个解释起来好像比较复杂,反正上次一专家解释了半天没明白,好像说到了运算时寄存器的问题,总之结果如此,所以要避免这么写。
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的值不变的
这个解释起来好像比较复杂,反正上次一专家解释了半天没明白,好像说到了运算时寄存器的问题,总之结果如此,所以要避免这么写。
x=x++
实际上x的值不变的
这个解释起来好像比较复杂,反正上次一专家解释了半天没明白,好像说到了运算时寄存器的问题,总之结果如此,所以要避免这么写。
--------------------------------------------------------------------------------------
不会吧,x++和++x的问题还需要专家讲半天????
的问题
而是说
如果
x=1
则
x=x++;
后x不变
不错,确实是右边的x先赋值给左边的x
那++咋办呢?
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++,确实很难理解:)
这个问题还请指点!
---------------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
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
正数,补码=原码
????无论正数负数,它的补码都为相反数吧?