在我认为打印(int)~(-1)的计算过程如下时:
按位取反:0111 1111 1111 1111 1111 1111 1111 1110
由补码还原成反码(-1):0111 1111 1111 1111 1111 1111 1111 1101
反码还原成原码:0000 0000 0000 0000 0000 0000 0000 0010
得出结果2时我还觉得的我对知识掌握的很深刻
自信的按下ctrl+f5后:
妈妈生的!
然后开始寻求真理,但是找了很久都没有找到按位求反的详细运算过程,都是~的计算公式,并举例都是验证公式的正确性,
当百思不得其解时,突然想到我好像忽略了当计算~(-1)时存在内存中的并不是1000 0001 !!
而是其补码1111 1111(反码1111 1110+1),所以计算出的应该是补码0000 0000,最高位为0,表示正数(不是负数,因为是补码中的最高位),正数原码=补码=反码,所以输出的是0!
虽然只是很小的一个知识,也只是因为我没有记清楚概念闹出的乌龙,但自己想通的感觉很棒!
今晚能睡着啦!