DSP

二进制负数用补码表示的原因

2019-07-13 19:37发布

文章出处:http://blog.csdn.net/zzsfqiuyigui/article/details/5955645#comments       对于计算机或者DSP芯片来说,符号并没有什么特殊的储存方式,其实是和数字一起储存的。为了使得无论是无符号数还是符号数,都可以使用同样的加法减法规则,符号数中的负数用正数的补码表示。     假设CPU的字长是16位。我们都知道-1 + 1 =0,而0x0001表示1,那么-1用什么来表示才能使得-1 + 1 =0呢?答案很简单:0xffff,用16进制计算一下0xffff+0x0001,结果是0x10000。那么0x100000x0000等价麽,我们刚才说过用16比特来表达整数,最高位的1是第17位,这一位是溢出位在运算寄存器中没有储存这一位,所以结果是低16位,也就是0x0000这就是负数表示方式产生的原因。举个例子:-100。首先我们需要知道10016进制,用计算器转换一下,可以知道是0x0064,那么-100就是0x10000 - 0x0064,用计算器算一下得0xff9c。还有一种简单的转换符号的方法,就是取反加一:把数x写成二进制格式,每位0110,最后把结果加1就是-x了。