解答:正数在存储的时候就是原数字,但是负数要采取补码的方式存储。这样,负数的最高位就是1。比如:对于32位的系统int为四个字节,共32位,数字1就是0xffffffff(即-1的补码,最高位是1)。
对于0xffffffff 已经占满的32个位,左移时,高位全部舍去不要,低位补0比如左移4位就变成 0xfffffff0。但是右移就不一样了,右移时,低位舍去,高位补1,(原来的最高位就是1),所以右移四位还是 0xffffffff ,而不是 0x0fffffff。在数据不溢出的情况下,<<1相当于乘以2,>>1相当于除以2。-5>>2就相当于-5除以2再除以2,这是个整型,所以-5/2得-2,再除以2就得-1了。当然如果转为二进制再平移更容易理解。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)