补码运算进行取反加1是不操作符号位的,具体过程请看我4楼的解释
哦,是我说错了,我求负数的补码时比较习惯先求其绝对值的原码
雁无留踪之意,水无取影之心
哦,是我说错了,我求负数的补码时比较习惯先求其绝对值的原码
我在4楼的回答也是错误的,我的最后回答在14楼
抱歉,14楼是错的,看22楼
你的概念还是有问题,首先要理解原码的概念(下行红字):
数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了
来看22楼:
求负数补码的步骤:
(1)先求出其相反数的原码,这题中为10000000000000001./*-32769的相反数是+32769,你给的二进制少了个符号位0*/
/*所以应该是010000000000000001*/
(2)全部取反(包括符号位),即为01111111111111110 /*全部取反是101111111111111110*/
(3)再加1,即为01111111111111111(这就是-32769的补码) /*再加1是 101111111111111111*/
你的方法没有错,可是你理解的不对,结果碰巧对是因为现在正好是在溢出的情况
所谓溢出就是因为容量限制丢失了本来是合法的位。
你看你的解释一直都是合法操作,如何体现溢出呢?