• 补码二进制计算机为什么要用补码存储整型,关于32768的问题


    这几周笔者几篇文章介绍了改补码二进制的文章. 关联文章的地址

        数值的补码表现也分两种情况:
    (1)正数的补码:与原码雷同。
    例如,+9的补码是00001001。
    (2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
    例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码0000111按位取反为1111000;再加1,所以-7的补码是11111001。

        

        计算机为什么要用补码存储整型
      
    这得从二进制的原码说起:
    如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767
    最小为1111111111111111=-2的15次方减1=-32767
    此时0有两种表现方法,即正0和负0:0000000000000000=1000000000000000=0
    所以,二进制原码表现时,范围是-32767~-0和0~32767,因为有两个零的存在,所以不同的数值个数一共只有2的16次方减1个,比16位二进制可以提供的2的16次方个编码少1个。
    但是计算机中采取二进制补码存储数据,即正数编码稳定,从0000000000000000到0111111111111111依旧表现0到32767,而负数需要把除符号位当前的部分取反加1,即-32767的补码为1000000000000001。
    到此,再来看原码的正0和负0:0000000000000000和1000000000000000,补码表现中,前者的补码还是0000000000000000,后者经过非符号位取反加1后,同样酿成了0000000000000000,也就是正0和负0在补码系统中的编码是一样的。但是,我们知道,16位二进制数可以表现2的16次方个编码,而在补码中零的编码只有一个,也就是补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转成补码时酿成1000000000000000。所以,人为规定1000000000000000这个补码编码为-32768。
    所以,补码系统中,范围是-23768~32767。
    因此,实际上,二进制的最小数确实是1111111111111111,只是二进制补码的最小值才是1000000000000000,而补码的1111111111111111是二进制值的-1。

        每日一道理
    冰心说道:“爱在左,同情在右,走在生命的两旁,随时撒种,随时开花,将这一径长途,点缀得香花弥漫,使穿枝拂叶的行人,踏着荆棘,不觉得痛苦,有泪可落,却不是悲凉。”

        

        

        整型的宽度是一个字,也就是2个字节,16个二进制位,最高一名二进制位用来表现符号(正或负),那么剩下的15位来表现数值。

        所以,有:

        01111111 11111111是32767,最大的正整数

        00000000 00000001是1

        00000000 00000000是0

        11111111 11111111是-1(不是-32767)

        10000000 00000001是-32767(不是-1)

        10000000 00000000是-32768(不是-0),最小的负整数

        

        -32768在内存中的表现是10000000,00000000。进程是:先读入正值32768(10000000,00000000),再取反(01111111,11111111),再加1(10000000,00000000)

        

        计算机表现数主要从运算方法的一致性来考虑。
    比如00000000 00000001表现1很好理解,但是11111111 11111111为什么是-1呢?
    按照二进制加法
    11111111 11111111 + 00000000 00000001= 1 00000000 00000000
    结果超出了整型的宽度,溢出部分被疏忽,最后的计算机结果是00000000 00000000
    那么换成十进制,?+1=0,所以11111111 11111111表现成十进制就是-1

        

    文章结束给大家分享下程序员的一些笑话语录: 自行车
    一个程序员骑着一个很漂亮的自行车到了公司,另一个程序员看到了他,问 到,“你是从哪搞到的这么漂亮的车的?”
    骑车的那个程序员说, “我刚从那边过来, 有一个漂亮的姑娘骑着这个车过来, 并停在我跟前,把衣服全脱了,然后对我说,‘你想要什么都可以’”。
    另一个程序员马上说到, “你绝对做了一个正确的选择, 因为那姑娘的衣服你 并不一定穿得了”。

    --------------------------------- 原创文章 By
    补码和二进制
    ---------------------------------

  • 相关阅读:
    SQLite学习第02天:数据类型
    SQLite学习第01天:参考资料
    利用OllyDebug查看程序调用的dll模块
    Qt文件信息获取之QFileInfo
    Qt标准对话框之QColorDialog
    Windows平台下Qt开发环境的搭建
    何时使用引用参数(转)
    OpenCV2学习笔记01:Linux下OpenCV开发环境的搭建
    node实现缓存
    node进阶之用流实现上传文件
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3106588.html
Copyright © 2020-2023  润新知