计算机数字存储的那点儿事

     位(bit)是存储在计算中的最小单位;它是0或1。通常长度为8的位模式被称为一个字节(byte)。计算机中存储数字的主要有三种方法:无符号表示法、符号加绝对值表示法、二进制补码表示法。

     1.无符号表示法

     无符号整数就是没有符号的整数。它的范围结余0到正无穷大之间。然而,由于计算机不可能表示这个范围的所有整数,通常,计算机都定义了一个最大无符号整数常量,称为最大无符号整数,它的值是(2的n次方-1)。这里n就是计算机中国分配用于表示无符号整数的二进制位数。

     (1)存储无符号整数

  • 首先将整数变成二进制数
  • 如果二进制位数不足n位,则在二进制整数的左边补0,使它的总位数为n位。如果位数大于n,该整数无法存储。导致溢出的情况发生。 

       实例1:将7存储在8位存储单元中

       首先将整数转换为二进制(111)2。加5个0使总位数为8位,即(00000111)2。这里的2本应是写在右下角的。

     (2)溢出

      因为大小(即存储单元的位的数量)的限制,可以表达的整数范围是有限的。在n位存储单元中,我们可以存储的无符号整数仅为0到2n次方-1之间。例如,保存整数11在存储单元中,又试图加上9,就会发生溢出。表示十进制数20的最小位数是5位,即20=(10100)2,所以计算机丢掉最左边的位,并保留最右边的4位(0100)2,最终的结果显示为4。

     2.符号加绝对值表示法

     在这种方法中,用于无符号整数的有效范围(0到2的n次方-1)被分成2个相等子范围。前半个表示正整数,后半个表示负整数。例如:n为4,该范围是0000到1111。这个范围被分为两半:0000到0111以及1000到1111。注意该系统中有两个0:正0(0000)和负0(1000)。用符号加绝对值格式存储一个整数,需要用1个二进制位表示符号(0表示正,1表示负)。这就意味着在一个8位存储单元中,仅用7位表示数字的绝对值。因此,最大的整数值仅为无符号最大数的一半。在n位单元可存储的数字范围是-(2的n-1次方-1)至+(2的n-1次方-1),n位单元中最左位分配用于存储符号。

     实例1:用符号加绝对值格式表示法将+28存储在8位存储单元中。

     把28变为7位的二进制          0011100

     加符号位并存储                 00011100

 

     实例2:用符号加绝对值格式表示法将-28存储在8位存储单元中。

     把28变为7位的二进制          0011100

     加符号位并存储                  10011100

     

     (1)符号加绝对值表示法的溢出

     同无符号整数一样,有符号的整数也会溢出。

     在符号加绝对值表示法中,有两个0:+0和-0     

     3.二进制补码表示法

     符号加绝对值表示法不用于存储整数,而用于存储部分实数。几乎所有的计算机都使用二进制补码表示法来存储位于n为存储单元中的有符号整数。在深入讨论这种表示法之前,先介绍两种运算。

     (1)反码

     该运算简单反转各个位,即把0位变为1位,把1位变为0位。例如:00110110的反码为11001001 。进行2次反码运算就可以得到原先的整数。

     (2)补码

     该运算分为两步:首先,从右边复制位,知道有1被复制;接着,反转其余的位。例如:00110100的补码为11001100。同样,进行2次补码预算可以得到原先的整数。

     以二进制补码格式存储整数,计算机遵循以下步骤:

  • 将整数变成n位的二进制
  • 如果正数是正数或零,以其原样存储;如果是负数,计算机取其补码存储。

     从二进制补码格式还原整数,就算及遵循以下步骤:

  • 如果最左位是1,计算机取其补码。如果最左位是0,计算机不进行操作。
  • 计算机将该整数转换为十进制

     实例1:用二进制补码表示法将整数28存储在8位存储单元中。

     该整数是正数,因此在把该整数从十进制转换成二进制后不再需要其他操作。

     把28变为8位的二进制          00011100

 

     实例2:用二进制补码表示法将整数-28存储在8位存储单元中。

     该整数是负数,因此在转换成二进制后计算机对其进行二进制补码运算。

     把28变为8位的二进制          00011100

     进行补码运算                      11100100

 

     实例3:用二进制补码表示法将存储在8位存储单元中的00001101还原成整数。

     最左位是0,因此符号为正。该整数需要转换为十进制并加上符号即可。

 

     实例4:用二进制补码表示法将存储在8位存储单元中的11100110还原成整数。

     最左位是1,因此符号为负。在整数转换为十进制前需要进行补码运算。进行补码运算得到00011010,然后转换为十进制得到26,加上符号得到-26。

     二进制补码表示法仅有一个0。

     (4)二进制补码表示法的溢出

     在4位存储单元存储一个带符号的整数时出现正负两种溢出。

     例如:我们希望保存整数11在存储单元中,但计算机响应为-5。因为把11转换成二进制为:1011。在二进制补码表示法中1011表示负数,要转换成相应的十进制得先进行补码得到整数0101,即整数5,因为是负数,最后要加上符号,即-5。

     我们希望保存整数-10在存储单元中,但计算机响应为+6。正常情况下10的二进制位:1010,已经上溢了。而 -10的二进制补码存储为:0110。当把0110转成十进制时,最左位是0,直接转换,所以是+6。

       这一次分享了数字在计算机中的存储方法,其中可能会存在一些文字表达上的错误或者是逻辑上的错误,欢迎大家纠正指出。如果对文章存在疑问,大家可能在底下留言,博主会在24小时之内回复。下一遍我分享了数字在计算机中数据的运算,感兴趣的同学可以点击链接看一哈数据运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值