热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

鸡啄米:C++编程入门系列之二(原码、反码与补码)

转载自:http:www.jizhuomi.comsoftware23.html上一节进制数中鸡啄米讲了二进制、八进制、十进制和十六进制数的表示方法和相互转换关系。

转载自:

http://www.jizhuomi.com/software/23.html

    上一节进制数中鸡啄米讲了二进制、八进制、十进制和十六进制数的表示方法和相互转换关系。这节主要讲解二进制的几种编码表示方法。

        计算机存储数据信息都是以二进制编码存储的,机器内存储的数据的表达形式称为“机器数”,而它代表的数制称为这个机器数的“真值”。数有正负之分,那么在计算机里怎么表示正负呢,0和1不就刚好吗?呵呵,没错,就是用“0”表示正号,“1”表示负号,符号位放在数的最高位。例如,二进制数X=(+1010100),Y=(-1010100),则他们在机器中就存为

         X:


01010100

 

         Y:

 


11010100

 


        最左边那一位是符号位,跟它后面的数字一起组成一个数。

 鸡啄米:C++编程入门系列之二(原码、反码与补码)

        为了让计算机计算起来更简单,硬件设计起来也比较简单,人们研究了多种二进制编码方法。其实就是对负数的不同编码,正数基本不变。

1.原码

        刚才鸡啄米讲到的最高位是符号位,后面是绝对值来表示一个数,这种编码叫做“原码”。但是有个问题,就是0的表示不唯一,+0就是000...0,-0就是1000...0。另外,进行四则运算时,对于符号位都要单独处理,同号怎样运算,异号又怎样运算,有时还需要借位,这对计算机来说是很麻烦的,所以必须找更好的编码方法。

2.反码

        其实反码不怎么用,但是怎么说是一种编码方式,而且是求补码的中间码,我们还是需要学一下的。

        正数的反码跟原码一样,负数的反码的符号位跟原码一样,但其余各位取反,也就是0变1,1变0。例如,二进制数+1100111的原码是01100111,反码也是01100111,-1100111的原码是11100111,反码则是10011000。

3.补码

        大家想下,如果现在是7点,但是鸡啄米的表时间是9点,那怎样才能把它调准呢?鸡啄米可以往前调2个小时,也可以往后调10个小时,结果都是7点。这里就涉及到取模运算(以前我们叫求余运算),9-2 = 7,(9+10)%12 = 7,这里的%就是C++里的取模运算符。2与10对模数12是互为补数的。补码就是利用的这个原理,利用补码可以把减法运算变成两个补码相加,具体就是将其变为一个正数和一个负数的加法运算,然后计算这个正数和负数的补码,两个补码相加。因为补码的符号位作为数值参与运算,所以就不存在符号位单独处理的问题。

        正数的原码、反码和补码是一模一样的。

        负数的补码是其反码的最末位加1得到的,我们经常顺口记为负数的补码就是取反加1。

        必须要指出的是补码运算的结果也是补码,还要把它算到原码才得到最后结果。那么知道补码怎么计算原码,很简单,就是对补码再求补码就是源码了。

        鸡啄米给大家个例子:

       10-67 = ?,10的原码是00001010,补码跟原码一样,-67的原码是11000011,补码是10111101。两个补码相加是11000111,这是结果的补码,求原码要对这个补码再求补码,取反加1后就是10111001。

        最后鸡啄米再跟大家说下浮点数的存储方式。浮点数可以理解为小数。浮点数N的科学表示法为:N=M×2E。E表示2的幂,叫做N的阶码,它的位数反应了此浮点数的范围。M表示N的全部有效数字,叫做N的尾数,它的位数反应了浮点数的精度。

        浮点数的存储格式随着机器的不同而不同,比如,如果机器是16位机,其二进制浮点数的组成为4位阶码,12位尾数,存储格式如下:

    15       14  12     11     10    0


阶码符号阶码尾数符号尾数 

 

        这节的内容也是比较基础的内容,但是当你学会编程后可能用的很少,到了一定程度才会用到,鸡啄米希望到那时你再回来温习温习啊。


推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
author-avatar
ruishao520
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有