整数在内存中的存储

admin2024-07-05  43

一、整数为何以补码的方式存储

      1. 加法和减法是计算机中最基本的运算,计算机时时刻刻都离不开它们,所以它们由硬件直接支持。为了提高加减法的运算效率,硬件电路要设计得尽量简单。
      2.对于有符号数,内存要区分符号位和数值位,对于人脑来说,很容易辨别,但是对于计算机来说,就要设计专门的电路,这无疑增加了硬件的复杂性,增加了计算的时间。要是能把符号位和数值位等同起来,让它们一起参与运算,不再加以区分,这样硬件电路就变得简单了。

整数在内存中的存储,第1张

二、原码、反码、补码

1、原码

      将一个整数转换成二进制形式,就是其原码。例如short a=6,a的原码就是0000 0000 0000 0110;更改a的值a=-18;此时a的原码就是1000 0000 00010010。
通俗的理解,原码就是一个整数本来的二进制形式。
正数与负数的原码区别在于符号位(二进制最高位表示,0:正数,1:负数)

2、反码

     谈到反码,正数和负数要区别对待,因为它们的反码不一样。
   
 对于正数,它的反码就是其原码(原码和反码相同);负数的反码是将原码中除符号位以外的所有位(数值位)取反,也就是0变成1,1变成0。例如:short a=6,a的原码和反码都是0000 0000 0000 0110;更改a的值a=-18,此时a的反码是1111 1111 1110 1101。
short a=-100的反码:1111 1111 1001 1011

3、补码

     正数和负数的补码也不一样,也要区别对待。
     对于正数,它的补码就是其原码(原码、反码、补码都相同);负数的补码是其反码加 1。例如:short a=6,a的原码、反码、补码都是0000 0000 0000 0110;更改a的值a=-18,此时a的补码是1111 1111 1110 1110=1111 1111 1110 1101(负数反码)+1
     可以认为,补码是在反码的基础上打了一个补丁,进行了一下修正,所以叫“补码”。
原码、反码、补码的概念只对负数有实际意义,对于正数,它们都一样。

整数在内存中的存储,第2张

三、主要讲讲计算负数的存储方式    (补码 才是计算机存储的二进制)

1、原码、反码、补码的方式

(1)先算这个负数的 正数部分:                                                                                                                  -5 =>5 => 0000 0101(正数原码)                                                                                                                     =>1000 0101(负数原码)

(2)计算反码 除了符号位之外全部取反:                                                                                                    1000 0101(原码)=>1111 1010 (反码)

(3)计算补码 反码+1:                                                                                                                                1111 1010(反码)=> 1111 1011

2、巧妙方法推理
三步式:a.从右到左 遇到0就填0     b.遇到第一个1填1     c.再左边的全部取反

例如:-4在计算机存储的二进制 

      先写出正数4的二进制 0000 0100
      a.从右到左 遇到0就填0     b.遇到第一个1填1     c.再左边的全部取反
       -4=>1111 1100

整数在内存中的存储,第3张

留言:如果您对文章中的某个观点有不同的看法,或者有任何补充的建议,我也非常欢迎您的分享和讨论。

整数在内存中的存储,第4张

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!