负数补码为正数取反+1的图形化解释

在CSAPP中关于补码有以下论述:

负数补码为正数取反+1的图形化解释_第1张图片

负数补码为正数取反+1的图形化解释_第2张图片

一个数从左边1开始的到最右边的所有位取反相加将使这个数从左边1开始的到最右边的所有位全变为1,如对w=4,中5的二进制原码0x0101根据前面说的进行取反相加后为0x0111(7),如果再加1则变为0x1000(8)…………推导1

-5的补码表示为1011,结合公式2-3可以知道其可以看做是  -1*2^3+0*2^2+1*2^1+1*2^1= -8+(2+1)=-5,

而-5=(8-5)+(-8),第一个括号中8-5即为0x1000-0x0101,根据上面说的推导1,8-5=0x1000-0x0101=(0x0101取反加1),即0x0011

根据公式2-3,加上-1*2^3即0x1000,为1011


因此,-5的补码是5的带符号二进制原码0x0101,整体取反+1变为0x1011, 可以看做是(8-5)+(-8)的过程浓缩


你可能感兴趣的:(面试编程)