二进制负数用补码表示的原因
2012-07-29 01:12
288 查看
文章出处: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。那么0x10000和0x0000等价麽,我们刚才说过用16比特来表达整数,最高位的1是第17位,这一位是溢出位,在运算寄存器中没有储存这一位,所以结果是低16位,也就是0x0000。这就是负数表示方式产生的原因。举个例子:-100。首先我们需要知道100的16进制,用计算器转换一下,可以知道是0x0064,那么-100就是0x10000
- 0x0064,用计算器算一下得0xff9c。还有一种简单的转换符号的方法,就是取反加一:把数x写成二进制格式,每位0变1,1变0,最后把结果加1就是-x了。
对于计算机或者DSP芯片来说,符号并没有什么特殊的储存方式,其实是和数字一起储存的。为了使得无论是无符号数还是符号数,都可以使用同样的加法减法规则,符号数中的负数用正数的补码表示。
假设CPU的字长是16位。我们都知道-1 + 1 =0,而0x0001表示1,那么-1用什么来表示才能使得-1
+ 1 =0呢?答案很简单:0xffff,用16进制计算一下0xffff+0x0001,结果是0x10000。那么0x10000和0x0000等价麽,我们刚才说过用16比特来表达整数,最高位的1是第17位,这一位是溢出位,在运算寄存器中没有储存这一位,所以结果是低16位,也就是0x0000。这就是负数表示方式产生的原因。举个例子:-100。首先我们需要知道100的16进制,用计算器转换一下,可以知道是0x0064,那么-100就是0x10000
- 0x0064,用计算器算一下得0xff9c。还有一种简单的转换符号的方法,就是取反加一:把数x写成二进制格式,每位0变1,1变0,最后把结果加1就是-x了。
相关文章推荐
- 二进制负数用补码表示的原因
- 负数在计算机中的二进制表示(原码、反码与补码)
- 用补码表示负数而抛弃原码表示的原因
- 负数的二进制表示方法(正数:原码、负数:补码)
- 原码、反码、补码什么意思? 二进制、八进制、十六进制的负数表示?
- 剑指offer-二进制中1的个数,负数用补码表示
- 负数的二进制表示方法
- 负数在计算机中如何表示?为什么用补码存储
- 十进制的正整数,负数, 小数转为二进制.八进制.十六进制的方法 包括原码,反码,补码的介绍
- JS 二进制计算,如何得到一个负数的二进制表示
- 负数的二进制表示
- 原码、反码、补码,计算机中负数的表示
- 负数为什么用补码表示
- 负数二进制(补码形式)和十进制的转换
- 原码、反码、补码,计算机中负数的表示
- 让我细细捋一捋原码反码补码以及计算机中负数的表示
- 练习 3-4 在数的对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-2^(字长-1)的情况。请解释其原因。修改该函数,使它在任何机器上运行时都能打印出正确的值。
- 负数的二进制表示
- 负数的二进制表示方法
- 负数的二进制表示方法