Mohican_12/5 C语言—浮点 运算符

来源:互联网 发布:怎样挑选淘宝剪标衣服 编辑:程序博客网 时间:2024/06/15 16:32

浮点数存储详解以及算法运算符的介绍

摘要:

a. 浮点数在内存中的存储方式

b. 大小端问题

c.算法的理解 算法的运用

d.运算符:算数运算符逻辑运算符等

 关于浮点数:


指数:

指数部分即使用所谓的偏正值形式表示,实际值为表示值与一个固定值(32位的情况是127)的和。采用这种方式表示的目的是简化比较。因为,指数的值可能为正也可能为负,如果采用补码表示的话,全体符号位SExp自身的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储。单精度的指数部分是-126+127加上127,指数值的大小从12540255是特殊值)。浮点小数计算时,指数值减去偏正值将是实际的指数大小。

负数:

我们都知道,1d(十进制,下同)=1h(十六进制,下同),127d=7fh255d=ffh。那么如果表示负数该如何表示呢,答案说出来基本属于被折叠的那种,-1d=-1h-127d=-7fh-255d=-ffh

计算机的世界过于简单。在计算机里,没有负数和浮点数,数只有一种,就是整数,而且是无符号整数,而且还是有范围的。其他任何的数,都必须靠这一点点无符号整数来表示。我们都知道,计算机里面用二进制存储,那么,如果用n个二进制位来存储一个数的话,这个数能表示的范围就是02^n-1。当然,我们希望能够表示负数,所以计算机科学家们发明了补码(除了补码,还有其他表示负数的方法)。

我们以8位整数来举例。在计算机里面,科学家们希望用最高位来表示符号,这样子,数轴就会被分割成两段,0d-127d128d-255d。补码里面,把红色那一段移动到负数的部分,用来表示负数,也就是说,补码是「255dFFh)来表示-1d」,而不是说「FFh-1d」。


(作者:余天升
链接:https://www.zhihu.com/question/20329210/answer/14778331
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。)

以下都以-86,并且为8为二进制为例子:


对于+86不用说,其八位二进制表示为:

(一)0 1 0 1 0 1 1 0

对于-86来说,需要将+86按位取反:

(二)1 0 1 0 1 0 0 1

然后再末尾加上1:

(三)1 0 1 0 1 0 1 0

然后-86转化为八进制就是对(三)式从右向左每三位为一个单元进行计算,不足三位的补1(因为这是补码)得,

(四)6 5 2

同理,将-86转化为十六进制就是对(三)式从右往左每四位为一个单元进行计算不足四位的补1(因为这是补码)得:
(五)A A
所以-86的二进制,八进制,十六进制分别为(三),(四),(五)式

浮点数:

问题:

浮点数与0比较:

因为浮点数的精度限制,它不可能与整数精确比较,只能逼近那个整数,一般直接把整数与浮点数比较都是错误的。

《高质量C编程》:

4.3.3 浮点变量与零值比较

【规则4-3-3】不可将浮点变量用“==”或“!=”与任何数字比较。
千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
假设浮点变量的名字为x,应当将 
if (x == 0.0) // 隐含错误的比较
转化为 
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON是允许的误差(即精度)。

引入头文件:

#include <float.h>float.h里面有许多关于浮点类型的定义。

如:

FLT_EPSILON

DBL_EPSILON
LDBL_EPSILON


部分问题解疑:

https://www.cnblogs.com/youxin/p/3306136.html

http://blog.csdn.net/ivy8966/article/details/68485520




大小端存放:

小端:低地址放低数据:PC    Inter

大端:低地址放高数据:手机,网络


if 和 switch的区别

if else 表示两个或少量分支的嵌套,

如果用的太多就可以用switch 和 case

从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break为止。随后,switch语句将结束,程序从switch结束大括号之后的第一个语句继续执行,并忽略其他case。
假如任何一个case语句的值都不等于表达式的值,就运行可选标签default之下的语句。
假如表达式的值和任何一个case标签都不匹配,同时没有发现一个default标签,程序会跳过整个switch语句,从它的结束大括号之后的第一个语句继续执行。


汇编指令

汇编指令大全:http://blog.sina.com.cn/s/blog_71899d520102vfi5.html

mov 

add

push

call

cmp

eax

dword ptr

ecx

ebx

esp

ebp