阅读《C++Primer》的个人记录(二)——2.1基本内置类型-关于浮点数、补码

学习第二章基本内置类型的过程中,对于书上描写的单精度浮点数和双精度浮点数的相关内容和补码的作用原理没弄清楚,经过查阅相关资料,整理如下:



现从简单的补码说起,
原码:正数的原码就是它的本身,负数用最高位是1表示负数
反码:正数的反码就是原码,负数的反码等于原码除符号位以外所有的位取反
补码:正数的补码和原码一样,负数的补码是负数的反码加1
【符号位在计算时直接参与运算】
原码缺点:0有两种表示,无法处理减法
反码:可以处理加减法及符号位,但0仍然有两种表示方式
补码:完美解决以上问题
逐条分析
原码加减法运算:略(很显然除了两正数相加其他都算不了)
反码加减法运算:
我们将符号位与绝对值分开讨论(数字形如&&&&&&&&)
设一个负数为-X,则其反码表示的数为-(128-x)
—————正数+负数
现假设一个运算为Y+(-X)【Y为正数】
符号位运算为0+1
绝对值运算为Y+128-X
此时若Y>=X则溢出一位至符号位得符号位为0,同时绝对值位运算结果为Y-X(>0),再将结果取原码得到符号位为0,绝对值位Y-X。符合预期
此时若Y<X则,将结果取原码的符号位为1,绝对值为128-(Y+128-X)=X-Y,符合预期
—————负数+负数
现假设一个运算为(-X1)+(-X2)
符号位运算为1+1=0
绝对值位运算为(256-X1-X2)
此时若X1+X2>128则将结果取原码的绝对值位X1+X2-128,符号位为0。显然得到的答案不正确,但此类情况对应着溢出情况。所以结果也符合预期
此时若X1+X2<=128则绝对值位溢出一位至符号位得符号位为1,绝对值位为128-X-Y。符合预期
综上,反码运算解决了符号位问题。
但0仍然有00000000和10000000两种表示方法

补码
1、先解释——减一个数等同于加其的补码
设一个负数的原码为X,反码为Y,补码为Z则
X+Y=11111111
Z=Y+1
的X+Z=100000000(1溢出)=00000000
故X=-Z
所以说采用补码,统一了加减法
2、再解释补码的加减运算
略(同反码类似)



浮点数:
https://www.cnblogs.com/icmzn/p/5060195.html
我觉得这篇文章总结的很到位了,不再赘述【其实自己也没100%理解透彻233,等学习深入了再回头看看】



第二篇博客,虽然内容很简单,但觉得还是有点货的吧hhh,以后继续加油吧

原文地址:http://blog.51cto.com/14194961/2348840

时间: 2024-08-10 10:12:03

阅读《C++Primer》的个人记录(二)——2.1基本内置类型-关于浮点数、补码的相关文章

《C++ Primer》读书记录二

第二部分 容器和算法  第9章~第11章 2015年5月13日  星期三 第9章 顺序容器 sequential contai顺序容器的定义 vector<string> svec; list<int> ilist; deque<double> ddeq; 容器元素的初始化,将一个容器初始化为另一个容器的副本,初始化为一段元素的副本,分配和初始化指定数目的元素 容器内元素的类型约束:元素必须支持赋值运算,元素类型的对象必须可以赋值.事实上,除了输入输出标注库类型外,其他

Windows API 编程学习记录&lt;二&gt;

恩,开始写Windows API编程第二节吧. 上次介绍了几个关于Windows API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解.这节我们就使用Windows API 让大家来了解下Windows API的用法. 第一个介绍的Windows API 当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧: int WINAPI MessageBox(HWND hWnd, LPCTSTR lpTe

C++primer学习笔记(二)——Chapter 4

4.1  Fundamentals 1.Basic Concepts (1)操作符分为一元,二元或者三元操作符: (2)复杂的表达式中含有很多操作符时: 规则一:分为不同的级别,级别高的先运行: 规则二:相同级别的操作符有执行顺序的确定: (3)操作符可以改变操作数的类型 一般将级别低的转化成级别高的 (4)重载运算符 相同的运算符在对不同类型的对象进行操作的时候,会有不同的功能: (5)Lvalue和Rvalue 显而易见:Lvalue指的是Left value,Rvalue指的是Right

Spring Boot学习记录(二)--thymeleaf模板

Spring Boot学习记录(二)–thymeleaf模板 标签(空格分隔): spring-boot 自从来公司后都没用过jsp当界面渲染了,因为前后端分离不是很好,反而模板引擎用的比较多,thymeleaf最大的优势后缀为html,就是只需要浏览器就可以展现页面了,还有就是thymeleaf可以很好的和spring集成.下面开始学习. 1.引入依赖 maven中直接引入 <dependency> <groupId>org.springframework.boot</gr

前端常用功能记录(二)—datatables表格(转)

前端常用功能记录(二)—datatables表格 并不是所有的后台开发都有美工和前端工程师来配合做页面,为了显示数据并有一定的美感,jQuery的DataTables插件对于像我这样的前端菜鸟来说真是雪中送炭,当然对于专业的前端开发者来说它更是锦上添花!DataTables提供了针对表格的排序.浏览器分页.服务器分页.筛选.格式化.统计等强大功能. 工作中对程序员的学习模式才深有体会,不是从入门到精通,而是从会用到了解.对于我来说,基本都是拿到一个知识先做个东西出来,再来细细品味个中的细节,然后

C++ Primer学习笔记(二)

题外话:一工作起来就没有大段的时间学习了,如何充分利用碎片时间是个好问题. 接  C++ Primer学习笔记(一) 27.与 vector 类型相比,数组的显著缺陷在于:数组的长度是固定的,无法直接复制和赋值(Wrong:int arr2[]=arr1;),而且程序员无法知道一个给定数组的长度---没有size操作(但可以间接获取). 只有当性能测试表明使用 vector 无法达到必要的速度要求时,才使用数组. 没有所有元素都是引用的数组. 数组的维数必须用值大于等于 1 的常量表达式定义.此

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(二)(网内首发超详细版)

2.4 ssl方式部署apache 2.4.1安装apache ./configure --prefix=/usr/local/apache2 --enable-dav --enable-ssl--enable-so --enable-mods-shared=all make && make install 2.4.2安装svn 安装apr-1.4.6.tar.gz.apr-util-1.5.1.tar.gz.neon-0.29.6.tar.gz同2.2章节部分 unzip sqlite-

【C语言天天练(二一)】内联函数

        引言:调用函数时,通常会因为建立调用.传递参数.跳转到函数代码并返回等花费掉一些时间,C语言的解决办法是使用类函数宏.在C99中,还提出了另外一种方法:内联函数.         内联函数:把函数变为内联函数将建议编译器尽可能快速地调用该函数,至于建议的效果则由实现来定义.因此,使函数变为内联函数可能会简化函数的调用机制,但也可能不起作用.内联函数是通过编译器来实现的,而宏则是在预编译的时候替换. 创建内联函数方法:在函数声明中使用函数说明符inline. 内联函数的特点: 1.

C++ Primer(第五版) 第二章 基本内置类型

容易忘记的部分: 2.1:C++提供的几种字符串类型有哪些及其用途? 基本的字符类型char,一个char的类型和一个机器字节一样 其他字符类型用于拓展字符集,如wchar_t.char16_t.char32_t wchar_t类型确保可以存放机器最大拓展字符集中的任意一个字符 char16_t和char32_t则为Unicode字符集服务 2.2:如何选择所使用的类型 当数值不为负数时,使用无符号类型(unsigned) 一般常用int和long long执行整数的运算 算术表达式中不使用ch