符号计算

漫谈计算机组成原理(九)定点数及定点数的运算

痴心易碎 提交于 2019-11-28 16:02:30
本文讲什么? 在计算机中,小数点并没有用专门的器件去表示,而是按照一种约定的方式,统一存储在寄存器单元中的。算数逻辑运算单元(ALU)是CPU的组成部分,负责算数和逻辑的运算。那么,ALU究竟是如何工作的呢? 这就是本文主要探讨的内容: 什么是定点数? 定点数的位移、加、减、乘、除运算是如何进行的? 定点数是啥? 从字面意思来理解,“定点数”就是“点”不动的数。那么究竟是什么“点”不动呢?没错,就是“小数点”。 在上一讲我们说道,不论是整数还是小数,都是有小数点的。 整数的小数点表示在最后一位数字的后面,而小数的小数点标识在真值的符号位后面。 如图所示: 除了定点数,还有一种数叫做“浮点数”,浮点数将在下一讲展开介绍。 定点数的运算 好了,介绍完定点数的基本概念以后,我们展开讲定点数的位移运算和四则运算。定点数的四则运算实际上要比我们想象的复杂的多。 机器并不像人,一眼就知道二二得四,他需要知道2的定点表示形式,然后两个定点数相乘,相乘是有一定的过程的,经过了这个过程,才能得到结果的二进制数,最终输出给我们。 我们要做的,就是了解加减乘除究竟经历了什么样子的过程 。 定点数的位移运算 不要看移位运算简单,但是它在计算机的运算中的地位是举足轻重的。没有移位运算,也就没有后面的乘除法,乘除法就是在移位运算和加减运算的配合下实现的。 移位运算的规则: 虽然正数和负数的移位运算规则不相同

定点数与浮点数区别

与世无争的帅哥 提交于 2019-11-28 16:01:42
最近做HDR时,经常要用NV提供的16位纹理,它的说明书16位能达到24位的精度,就很奇怪?一直搞不懂浮点数的精度怎么算的? 今天认真看了一下IEEE float point的标准,终于明白是什么了 1. 什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表达实数。典型的比如相对于浮点数的定点数(Fixed Point Number)。在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。货币的表达就可以使用这种方式,比如 99.00 或者 00.99 可以用于表达具有四位精度(Precision),小数点后有两位的货币值。由于小数点位置固定,所以可以直接用四位数值来表达相应的数值。SQL 中的 NUMBER 数据类型就是利用定点数来定义的。还有一种提议的表达方式为有理数表达方式,即用两个整数的比值来表达实数。 定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数。最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa ),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。比如 123.45 用十进制科学计数法可以表达为 1.2345 × 102 ,其中 1.2345 为尾数,10

Windbg命令的语法规则系列(二)

半城伤御伤魂 提交于 2019-11-28 15:06:10
二、字符串通配符语法 一些调试器命令具有接受各种通配符的字符串参数。这些类型的参数支持以下语法功能: 星号(*)表示零个或多个字符。 问号(?) 表示任何单个字符。 包含字符列表的括号([])表示列表中的任何单个字符。列表中只有一个字符匹配。 在这些括号中,可以使用连字符(-)指定范围。 例如,prog[er-t7]am匹配“progeam”、“program”、“progsam”、“progtam”和“prog7am”。 数字符号(#)表示前面零个或多个字符。例如,lo#p与“lp”、“lop”、“loop”、“loop”等匹配。您还可以将数字符号与括号组合,因此m[ia]#n与“mn”、“min”、“man”、“maan”、“main”、“mian”、“miin”、“miain”等匹配。 加号(+)表示前面的一个或多个字符。例如,lo+p与lo p相同,只是lo+p与“lp”不匹配。同样,m[ia]+n与m[ia]n相同,只是m[ia]+n与“mn”不匹配。A?+B和A*B一样,除了A?+B与“AB”不匹配。 如果必须指定文字数字符号(#),问号(?),左括号([),右括号(]),星号(*)或加号(+)字符,必须在字符前面添加反斜杠(\)。如果不将连字符括在括号中,则连字符始终是文字。但不能在带括号的列表中指定文字连字符。 指定符号的参数还支持一些附加功能。

为什么一个byte的存储范围是-128~127?

狂风中的少年 提交于 2019-11-28 09:57:37
为什么一个byte的存储范围是-128~127? 文本关键字:byte、字节、二进制位、反码、补码 一、byte 在计算机中,一个二进制位是最小的存储单元,由于是二进制,所以能存储的数字只能是0和1。显然,如果我们直接去操作每个二进制位将是很麻烦的过程,所以在编程中我们直接使用的是其他的数据类型,如:byte、int、float。这些数据类型能够使我们的数据存储更加方便,我们只需要关心他们能够存储多大范围和什么样类型的数据就可以了。 那么一个byte,也就是我们所说的一字节,他所占用的空间是8个二进制位。 1 byte = 8 bit(比特) 这8个bit就是8个二进制位,其中有一个是符号为,刚好可以用0和1来代表正负。那么这8个二进制位到底能够表示多大范围的数字呢?对于正数的进制转换相信难不倒大家,也可以参考底部的相关文章,我们先来看一下负数在二进制下是如何表示和转换的。 二、反码与补码 首先把公式立在这里: 正数的补码 = 原码 = 反码 负数的补码 = 反码 + 1 那么首先什么是原码呢?很简单,在我们不考虑符号的情况下,按照进制的转换方法将一个十进制数转换为二进制数,再添加上相应的符号位就完成了。符号位出现在最前(左)面一位,0代表正数,1代表负数。 +3 -> 11 -> 根据符号和byte长度补全:0000 0011 -5 -> 101 -> 根据符号和byte长度补全

FIRST集和FOLLOW集求法

我是研究僧i 提交于 2019-11-28 08:46:54
龙书算法: First: ( 1)、如果 X是终结符,那么 First( X) = X; ( 2)、如果 X是非终结符,且 X à Y 1 Y 2 ......Y k是一个产生式,其中 k>=1;那么如果对于某个 I, a在 First( Yi)中 ,且 #(空串)在所有的 First( Y1) …..First( Yi-1)中,就吧 a加入到 First( X)中。 ( 3)、如果 X à #(空串 )是一个产生式,那么将 #加入到 First( X)中。 Follow: ( 1)、将 $放入到 Follow( S)中,其中 S是开始符号,而 $是输入右端结束的标记。 ( 2)、如果存在一个产生式 A à aBb,那么 First( b)中除 #(空串)外地所有符号都在 Follow( B)中。 ( 3)、如果存在一个产生式 A à aB, 或存在 A à aBb且 First( b)包含 #(空串),那么 Follow( A)中的所有符号都在 Follow( B)中。 自己理解: First:(看 X的产生式) ( 1)、如果 X是终结符,那么 First( X) = X; ( 2)、如果 X是非终结符,且 X à Y 1 Y 2 ......Y k, i=1; 1)、将 First( Yi)加入到 First( X)中, 2)、如果 #包含着 First( Yi)中, i++

JVM探索之Class文件结构解析

若如初见. 提交于 2019-11-28 07:44:32
转载地址: http://www.cnblogs.com/beliefbetrayal/archive/2012/02/01/2334100.html JVM 学习笔记目录: JVM探索之Class文件结构解析(一):Class文件的格式与定义 JVM探索之Class文件结构解析(二) :常量池 JVM探索之Class文件结构解析(三):访问修饰符、类索引、父类索引与接口索引集合 Class文件的格式与定义   Class文件是一组以8位字节(1Byte=8bit,计算机也有1Byte=16bit或1Byte=32bit的)为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在Class文件之中,中间没有添加任何分隔符。当遇到需要占用8位字节以上空间的数据项时,则会按高位在前的方式分割成若干个8位字节进行存储。   Class文件结构中只有2种数据类型:无符号数和表。 无符号数 , 属于基本的数据类型,以u1、u2、u4、u8来分别表示1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值和UTF-8编码构成的字符串; 表 ,是由多个无符号数或其他表作为数据项构成的复合数据类型,所有的表都习惯已"_info"结尾(整个Class文件可以看成是一张表)。   上图是Class文件的结构表,无论是无符号数还是表类型

EFLAGS寄存器(标志寄存器)

為{幸葍}努か 提交于 2019-11-28 06:37:41
  由于最近公司项目到了收尾阶段,一直说要写博的我耽搁了好久,因为近期一直加班,回来后我也有自己的东西要去学,博客就耽搁了!   我还是想废话说一点,也不算吐槽,因为上阵子有个项目计算文件大小的例子,跟公司弄java的聊了一下,我说大小的判断为什么要用数字,而不去用移位运算来代替呢,移位不更加客观,可阅读吗?1 << 30位代表1GB,1 << 20代表1MB,1 << 10代表1KB,然后同事就说没必要,有API可以调用直接计算出文件的大小,话题到这,我就没接着讲了。诚然,高级语言API的调用极大便利了程序开发效率,另一方面我也觉得人像一个机器一样在那干活,没啥意思。本文讲述的EFLAGS寄存器(标志寄存器)是X86的内容,如果读者您觉得没必要或者也是认为API调用更加方便,那么我觉得您没有接着往下阅读的必要了。   既然被称作一声IT工程师,我觉得我们有必要去敬重一下自己的这个职位,或许是我个人原因吧,我始终觉得拿着计算器算3 × 3 = 9(举例而已),而不知道 3 × 3为什么等于9,就像API的调用,不知道事物的本质,很显然,大家都会知道 3 × 3是3个3相加,为了便于计算,人们发明了“×”(乘法)。编程犹如同数学,底子不好就注定上层质量,发展前景定然会受限。例子举得不好,废话也不多说了,知之者知之!!!   另外,这篇文章不是从0开始的

知识、数据与模型

为君一笑 提交于 2019-11-28 04:21:38
很多领域都需要用知识和数据建立模型用于预测未来或认识过去。有些领域,知识很少,数据很多,数据容易获取,建立模型时主要用数据就能完成,比如图像识别、语音识别、垃圾识别,这主要针对具有人类日常知识的通用领域,数据标签获取难度低。有些领域,积累了很多知识,数据很少,公开的数据更少,数据获取费用很高,建模型时使用少量的数据,再上大量的知识,比如地下地质体地质建模、金融预测模型,这些针对专业性很强的领域,门槛较高,数据标签获取的难度大,费用高。目前流行的基于大数据的机器学习适合于数据密集型建模,不太适应缺少样本的专业领域的机器学习。基于符号学习的机器学习适合知识密集型建模,或许是专业领域智能建模的必有之路。 按照最早人工智能的发展设想,要达到强人工智能,类似于人类的智能,要先经过数据智能(学习),再经过符号(智能)学习,最后达到生物(人)智能。基于数据的学习计算量大,基于符号的机器学习计算量小,更符合人类的学习过程。而且人类知识也多以符号的形式存储和表达。因此,从这个角度说,目前处于人工智能的初级阶段。 钻井资料少、地震资料分辨率地,建立模型时往往利用大量的经验知识。目前流行的机器学习方法,主要基于统计学方法,需要用到大量数据,从数据中重建专家的经验知识。与传统的建模方法,即业务专家指导的数据空间插值方法不同。当不存在大量样本可以学习的情况下,甚至小样本也不存在的情况下

汇编基础知识

邮差的信 提交于 2019-11-27 23:46:34
************************************************************************************************** 寄存器 ************************************************************************************************** 1. 通用寄存器   通用寄存器包括了8个16/32位的寄存器:AX/EAX、BX/EBX、CX/ECX、DX/EDX、SP/ESP、BP/EBP、DI/EDI及SI/ESI。其中AX/EAX、BX/EBX、CX/ECX、DX/EDX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。这4个通用数据寄存器除通用功能外,还有如下专门用途:   AX/EAX作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放操作数。另外,所有的I/O指令都使用AX或AL与外部设备传送信息。   BX/EBX在计算存储器地址时,可作为基址寄存器使用。   CX/ECX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。DX在作双字长运算时

2019/8/19 C语言回顾(1)

最后都变了- 提交于 2019-11-27 22:17:06
一、冯诺依曼   将计算机分为5个部分   (1)输入设备:键盘、鼠标   (2)输出设备:显示屏   (3)存储器:     内存(运行内存)RAM:内存条     外存 ROM: 硬盘、光盘、u盘、sd卡     寄存器:在cpu内部 、提高程序的运行效率    (4)运算器    (5)控制器   注:运算器和控制器集成为cpu 二、进制转换   1、十进制 逢十进一 78 = 8*10^0 + 7*10*^1   二进制 逢2进一 1001110   八进制 逢8进1   十六进制 0,1,。。。。a,b,c,d,e,f   3位二进制数可以视为一位8进制数   4位二进制数可以视为一位十六进制数   2、 ascii码表   0 === '\0'   10 === '\n'   32 === ' '   48 === '0'   65 === 'A'   97 === 'a'   3、词法符号 关键字   c语言中一共有32个关键字: auto 声明自动变量 short 声明短整型变量或函数 int 声明整型变量或函数 long 声明长整型变量或函数 float 声明浮点型变量或函数 double 声明双精度变量或函数 char 声明字符型变量或函数 struct 声明结构体变量或函数 union 声明共用数据类型 enum 声明枚举类型 typedef