转载自:

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

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

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

X:

0 1 0 1 0 1 0 0

Y:

1 1 0 1 0 1 0 0

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

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

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

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

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

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

  1. c语言类静态数据成员函数,鸡啄米:C++编程入门系列之二十一(C++程序设计必知:类的静态成员)...

    鸡啄米在上一讲数据和函数中讲到,函数之间共享数据也就是此函数访问彼函数的数据主要是通过局部变量.全局变量.类的数据成员.类的静态成员及友元实现的,前三个已经讲过了,这一讲鸡啄米来讲讲静态成员.静态成员 ...

  2. 鸡啄米:C++编程入门系列之五(运算符和表达式)

    转载自: http://www.jizhuomi.com/software/32.html 上一讲鸡啄米给大家讲了一些数据类型,这一讲主要讲解编程入门知识-运算符和表达式.运算符,顾名思义,就是用于计 ...

  3. 鸡啄米VS2010/MFC编程入门教程——学习1初次接触

    2015年5月12日23:13:44 2013年~2014年,在九固开发伺服上位机的时候,刚开始的时候还想用VC6.0开发的,但是在WIN7下,各种不兼容,索性干脆直接换了VC2010. 原本想装VS ...

  4. 鸡啄米之VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)

    目录 一.目的: 1.点击列表框某个变量后,编辑框就显示出来这个变量名字 一.参考: 1.VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox) ①总结:good:亲测有效,适合多 ...

  5. 鸡啄米vc++2010系列11(非模态对话框的创建)

    上一节鸡啄米讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 鸡啄米已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.鸡啄米会将 ...

  6. 鸡啄米vc++2010系列40(文档、视图和框架:分割窗口)

    分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型的视图,或者是不同类型的视图. MFC分割窗口的方式有两种,动态分割和静态分割. 动态分割窗口通 ...

  7. 鸡啄米vc++2010系列35(工具栏资源及CToolBar类)

    工具栏简介 工具栏一般位于主框架窗口的上部,菜单栏的下方,由一些带图片的按钮组成.当用户用鼠标单击工具栏上某个按钮时,程序会执行相应的操作,如果鼠标没有点击,只是停留在某个按钮上一会后,会弹出一个小窗 ...

  8. 鸡啄米vc++2010系列12(属性页对话框)

    前面讲了模态对话框和非模态对话框,本节开始鸡啄米讲一种特殊的对话框--属性页对话框.另外,本套教程所讲大部分对VC++各个版本均可适用或者稍作修改即可,但考虑到终究还是基于VS2010版本的,所以将& ...

  9. 鸡啄米vc++2010系列27(列表视图控件List Control 上)

    列表视图控件简介 列表视图控件List Control同样比较常见,它能够把任何字符串内容以列表的方式显示出来,这种显示方式的特点是整洁.直观,在实际应用中能为用户带来方便. 列表视图控件是对前面讲到 ...

最新文章

  1. 04. Mybatis的resultMap基本应用
  2. 敏捷个人手机应用:如何使用时中法习惯
  3. Python爬虫入门教程 1-100 CentOS环境安装
  4. R语言中级--自定义方程
  5. xampp中apache点击启动失败解决方法
  6. 剑指offer所有的题目总结(转)
  7. python爬虫系统知识_网络爬虫基础知识(Python实现)
  8. z变换与拉普拉斯变换的关系
  9. jdk32位安装包下载_Win10离线安装.NET Framework 3.5方法汇总(附下载)
  10. 【正则】详解python正则表达式之re.group()用法
  11. 手机通话记录重复显示怎么处理_苹果8手机通话记录合并 苹果合并重复通话记录...
  12. 学习编程语言有哪些基本步骤呢?
  13. java获取时分秒毫秒_java 中毫秒数转换成时分秒格式java中有什么方法可以把一个毫秒数格式化成”时:分:秒”...
  14. 飞机大战4-我的子弹
  15. ERNIE: Enhanced Representation through Knowledge Integration, Yu Sun 2020【representation+Bert+ner】
  16. 漫谈TCP新算法Elastic-TCP
  17. Java bean中字段命名潜规则,前两个字母要么都大写,要么都小写
  18. 【Redis】实现附近人功能
  19. Web重构之道 大漠
  20. exp00091 oracle,EXP-00091错误的说明和解决方法

热门文章

  1. 很多程序员都没搞明白的时间与时区知识 - 24时区/GMT/UTC/DST/CST/ISO8601
  2. 正常情况下如何卸载计算机软件?
  3. python 电压 谐波_教你计算总谐波失真(THD)
  4. 【matlab】Matlab中产生正态分布随机数的函数normrnd
  5. perl bless
  6. MySQL创建表 复制其他表的结构
  7. 利用网络编程实现TFTP协议
  8. linux容器内核配置,如何在Linux内核Centos下使用Sentinel LDK保护Docker容器实例
  9. onehot编码的意义
  10. matlab 图像 whos函数,matlab图像处理常用函数